Skip to content

Commit 3d45613

Browse files
committed
#283 -- Add Task verb to voice_response.py
1 parent 348e033 commit 3d45613

File tree

2 files changed

+124
-1
lines changed

2 files changed

+124
-1
lines changed

tests/unit/twiml/test_voice_response.py

+49-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from nose.tools import assert_equal
33
from six import u
44
from tests.unit.twiml import TwilioTest
5-
from twilio.twiml.voice_response import VoiceResponse, Dial, Gather
5+
from twilio.twiml.voice_response import VoiceResponse, Dial, Enqueue, Gather
66

77

88
class TestResponse(TwilioTest):
@@ -349,6 +349,18 @@ def test_queue(self):
349349
)
350350

351351

352+
class TestEcho(TwilioTest):
353+
354+
def test_echo(self):
355+
r = VoiceResponse()
356+
r.echo()
357+
358+
assert_equal(
359+
self.strip(r),
360+
'<?xml version="1.0" encoding="UTF-8"?><Response><Echo /></Response>'
361+
)
362+
363+
352364
class TestEnqueue(TwilioTest):
353365

354366
def test_enqueue(self):
@@ -366,6 +378,30 @@ def test_enqueue(self):
366378
'<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue action="act" method="GET" waitUrl="wait" waitUrlMethod="POST">TestEnqueueAttribute</Enqueue></Response>'
367379
)
368380

381+
def test_task_string(self):
382+
e = Enqueue(None, workflowSid='123123123')
383+
e.task('{"account_sid": "AC123123123"}')
384+
385+
r = VoiceResponse()
386+
r.append(e)
387+
388+
assert_equal(
389+
self.strip(r),
390+
'<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue workflowsid="123123123"><Task>{"account_sid": "AC123123123"}</Task></Enqueue></Response>'
391+
)
392+
393+
def test_task_dict(self):
394+
e = Enqueue(None, workflowSid='123123123')
395+
e.task({"account_sid": "AC123123123"})
396+
397+
r = VoiceResponse()
398+
r.append(e)
399+
400+
assert_equal(
401+
self.strip(r),
402+
'<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue workflowsid="123123123"><Task>{"account_sid": "AC123123123"}</Task></Enqueue></Response>'
403+
)
404+
369405

370406
class TestDial(TwilioTest):
371407

@@ -379,6 +415,18 @@ def test_dial(self):
379415
'<?xml version="1.0" encoding="UTF-8"?><Response><Dial>1231231234</Dial></Response>'
380416
)
381417

418+
def test_sim(self):
419+
d = Dial()
420+
d.sim('123123123')
421+
422+
r = VoiceResponse()
423+
r.append(d)
424+
425+
assert_equal(
426+
self.strip(r),
427+
'<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sim>123123123</Sim></Dial></Response>'
428+
)
429+
382430
def test_sip(self):
383431
""" should redirect the call """
384432
d = Dial()

twilio/twiml/voice_response.py

+75
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import json
2+
13
from twilio.twiml import TwiML
24

35

@@ -57,6 +59,15 @@ def dial(self,
5759
**kwargs
5860
))
5961

62+
def echo(self,
63+
**kwargs):
64+
"""
65+
Add a new <Echo> element
66+
"""
67+
return self.append(Echo(
68+
**kwargs
69+
))
70+
6071
def enqueue(self,
6172
name,
6273
action=None,
@@ -444,6 +455,19 @@ def queue(self,
444455
**kwargs
445456
))
446457

458+
def sim(self,
459+
sid,
460+
**kwargs):
461+
"""
462+
Add a <Sim> element
463+
464+
:param sid: sim sid
465+
"""
466+
return self.append(Sim(
467+
sid,
468+
**kwargs
469+
))
470+
447471
def sip(self,
448472
uri,
449473
username=None,
@@ -541,6 +565,20 @@ def __init__(self, queue_name, **kwargs):
541565
self.value = queue_name
542566

543567

568+
class Sim(TwiML):
569+
"""
570+
<Sim> element
571+
"""
572+
def __init__(self, sid, **kwargs):
573+
"""
574+
Create a new <Sim> element
575+
576+
:param sid: sim sid
577+
"""
578+
super(Sim, self).__init__(**kwargs)
579+
self.value = sid
580+
581+
544582
class Sip(TwiML):
545583
"""
546584
<Sip> element
@@ -556,6 +594,17 @@ def __init__(self, uri, **kwargs):
556594
self.value = uri
557595

558596

597+
class Echo(TwiML):
598+
"""
599+
<Echo> element
600+
"""
601+
def __init__(self, **kwargs):
602+
"""
603+
Create a new <Echo> element
604+
"""
605+
super(Echo, self).__init__(**kwargs)
606+
607+
559608
class Enqueue(TwiML):
560609
"""
561610
<Enqueue> element
@@ -570,6 +619,32 @@ def __init__(self, name, **kwargs):
570619
super(Enqueue, self).__init__(**kwargs)
571620
self.value = name
572621

622+
def task(self, attributes, **kwargs):
623+
"""
624+
Add a <Task> element
625+
626+
:param attributes: Attributes for a task
627+
:return: <Task> element
628+
"""
629+
return self.append(Task(attributes, **kwargs))
630+
631+
632+
class Task(TwiML):
633+
"""
634+
<Task> element
635+
"""
636+
def __init__(self, attributes, **kwargs):
637+
"""
638+
Create a new <Task> element
639+
640+
:param attributes: Attributes for a task
641+
"""
642+
super(Task, self).__init__(**kwargs)
643+
if isinstance(attributes, basestring):
644+
self.value = attributes
645+
else:
646+
self.value = json.dumps(attributes)
647+
573648

574649
class Gather(TwiML):
575650
"""

0 commit comments

Comments
 (0)