8000 Merge pull request #245 from wanjunsli/tr-filter-friendly-name · saroshfarhan/twilio-python@02dda06 · GitHub
[go: up one dir, main page]

Skip to content

Commit 02dda06

Browse files
committed
Merge pull request twilio#245 from wanjunsli/tr-filter-friendly-name
Supporting filter_friendly_name
2 parents 641e982 + cba4bfb commit 02dda06

File tree

4 files changed

+208
-1
lines changed

4 files changed

+208
-1
lines changed

tests/task_router/test_workflow_config.py

Lines changed: 197 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,203 @@ def test_from_json2(self):
7878
self.assertEqual(2, len(config.task_routing.filters))
7979
self.assertEqual(4, len(config.task_routing.default_filter))
8080

81+
def test_from_json_with_filter_friendly_name(self):
82+
data = {
83+
'task_routing':
84+
{
85+
'filters': [
86+
{
87+
'expression': 'type == "sales"',
88+
'filter_friendly_name': 'Sales',
89+
'targets': [
90+
{
91+
92+
'queue': 'WQec62de0e1148b8477f2e24579779c8b1',
93+
'expression': 'task.language IN worker.languages'
94+
}
95+
]
96+
},
97+
{
98+
'expression': 'type == "marketing"',
99+
'filter_friendly_name': 'Marketing',
100+
'targets': [
101+
{
102+
'queue': 'WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f',
103+
'expression': 'task.language IN worker.languages'
104+
}
105+
]
106+
},
107+
{
108+
'expression': 'type == "support"',
109+
'filter_friendly_name': 'Support',
110+
'targets': [
111+
{
112+
'queue': 'WQe5eb317eb23500ade45087ea6522896c',
113+
'expression': 'task.language IN worker.languages'
114+
}
115+
]
116+
}
117+
],
118+
'default_filter':
119+
{
120+
'queue': 'WQ05f810d2d130344fd56e3c91ece2e594'
121+
}
122+
}
123+
}
124+
# marshal object
125+
config = WorkflowConfig.json2obj(json.dumps(data))
126+
self.assertEqual(3, len(config.task_routing.filters))
127+
self.assertEqual(1, len(config.task_routing.default_filter))
128+
129+
# check that the configuration was marshaled to "friendly_name" and not "filter_friendly_name"
130+
expected_config_data = {
131+
"task_routing":
132+
{
133+
"default_filter":
134+
{
135+
"queue": "WQ05f810d2d130344fd56e3c91ece2e594"
136+
},
137+
"filters": [
138+
{
139+
"expression": "type == \"sales\"",
140+
"friendly_name": "Sales",
141+
"targets": [
142+
{
143+
"expression": "task.language IN worker.languages",
144+
"queue": "WQec62de0e1148b8477f2e24579779c8b1"
145+
}
146+
]
147+
},
148+
{
149+
"expression": "type == \"marketing\"",
150+
"friendly_name": "Marketing",
151+
"targets": [
152+
{
153+
"expression": "task.language IN worker.languages",
154+
"queue": "WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f"
155+
}
156+
]
157+
},
158+
{
159+
"expression": "type == \"support\"",
160+
"friendly_name": "Support",
161+
"targets": [
162+
{
163+
"expression": "task.language IN worker.languages",
164+
"queue": "WQe5eb317eb23500ade45087ea6522896c"
165+
}
166+
]
167+
}
168+
]
169+
}
170+
}
171+
172+
expected_config_json = json.dumps(expected_config_data,
173+
sort_keys=True,
174+
indent=4)
175+
# check that marshaling back stays as "friendly_name"
176+
self.assertEqual(config.to_json(), expected_config_json)
177+
178+
def test_from_json_with_both_filter_and_friendly_name(self):
179+
data = {
180+
'task_routing':
181+
{
182+
'filters': [
183+
{
184+
'expression': 'type == "sales"',
185+
'filter_friendly_name': "Sales",
186+
'friendly_name': 'Sales2',
187+
'targets': [
188+
{
189+
190+
'queue': 'WQec62de0e1148b8477f2e24579779c8b1',
191+
'expression': 'task.language IN worker.languages'
192+
}
193+
]
194+
},
195+
{
196+
'expression': 'type == "marketing"',
197+
'filter_friendly_name': 'Marketing',
198+
'friendly_name': 'Marketing2',
199+
'targets': [
200+
{
201+
'queue': 'WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f',
202+
'expression': 'task.language IN worker.languages'
203+
}
204+
]
205+
},
206+
{
207+
'expression': 'type == "support"',
208+
'filter_friendly_name': 'Support',
209+
'friendly_name': 'Support2',
210+
'targets': [
211+
{
212+
'queue': 'WQe5eb317eb23500ade45087ea6522896c',
213+
'expression': 'task.language IN worker.languages'
214+
}
215+
]
216+
}
217+
],
218+
'default_filter':
219+
{
220+
'queue': 'WQ05f810d2d130344fd56e3c91ece2e594'
221+
}
222+
}
223+
}
224+
# marshal object
225+
config = WorkflowConfig.json2obj(json.dumps(data))
226+
self.assertEqual(3, len(config.task_routing.filters))
227+
self.assertEqual(1, len(config.task_routing.default_filter))
228+
229+
# check that the configuration was marshaled to "friendly_name" and not "filter_friendly_name"
230+
expected_config_data = {
231+
"task_routing":
232+
{
233+
"default_filter":
234+
{
235+
"queue": "WQ05f810d2d130344fd56e3c91ece2e594"
236+
},
237+
"filters": [
238+
{
239+
"expression": "type == \"sales\"",
240+
"friendly_name": "Sales",
241+
"targets": [
242+
{
243+
"expression": "task.language IN worker.languages",
244+
"queue": "WQec62de0e1148b8477f2e24579779c8b1"
245+
}
246+
]
247+
},
248+
{
249+
"expression": "type == \"marketing\"",
250+
"friendly_name": "Marketing",
251+
"targets": [
252+
{
253+
"expression": "task.language IN worker.languages",
254+
"queue": "WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f"
255+
}
256+
]
257+
},
258+
{
259+
"expression": "type == \"support\"",
260+
"friendly_name": "Support",
261+
"targets": [
262+
{
263+
"expression": "task.language IN worker.languages",
264+
"queue": "WQe5eb317eb23500ade45087ea6522896c"
265+
}
266+
]
267+
}
268+
]
269+
}
270+
}
271+
272+
expected_config_json = json.dumps(expected_config_data,
273+
sort_keys=True,
274+
indent=4)
275+
# check that marshaling back stays as "friendly_name"
276+
self.assertEqual(config.to_json(), expected_config_json)
277+
81278
def is_json(self, myjson):
82279
try:
83280
json.loads(myjson)

twilio/task_router/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import time
22
from .. import jwt
3+
from .taskrouter_config import TaskRouterConfig
4+
from .workflow_config import WorkflowConfig
5+
from .workflow_ruletarget import WorkflowRuleTarget
6+
from .workflow_rule import WorkflowRule
37

48
from .taskrouter_config import (
59
TaskRouterConfig

twilio/task_router/taskrouter_config.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,11 @@ def __init__(self, rules, default_target):
1313
self.filters = rules
1414
self.default_filter = default_target
1515

16+
for rule in self.filters:
17+
if not isinstance(rule, WorkflowRule):
18+
filter_friendly_name = rule.pop('filter_friendly_name', None)
19+
if filter_friendly_name is not None:
20+
rule['friendly_name'] = filter_friendly_name
21+
1622
def __repr__(self):
1723
return self.__dict__

twilio/task_router/workflow_rule.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,5 @@ def __repr__(self):
3030
return str({
3131
'expression': self.expression,
3232
'friendly_name': self.friendly_name,
33-
'target': self.target,
33+
'targets': self.targets,
3434
})

0 commit comments

Comments
 (0)
0