8000 add feedback summary endpoint · LilyAcorn/twilio-python@ae88263 · GitHub
[go: up one dir, main page]

Skip to content

Commit ae88263

Browse files
author
Doug Black
committed
add feedback summary endpoint
1 parent 20fed1e commit ae88263

File tree

4 files changed

+99
-9
lines changed

4 files changed

+99
-9
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"start_date": "2014-01-01",
3+
"end_date": "2014-01-31",
4+
"account_sid": "AC7b659acc64804bd8bc01a2d9d54248e1",
5+
"call_count": 10200,
6+
"call_feedback_count": 729,
7+
"quality_score_average": 4.5,
8+
"quality_score_median": 4,
9+
"quality_score_standard_deviation": 1,
10+
"issues": [
11+
{
12+
"description": "imperfect-audio",
13+
"count": 45,
14+
"percentage_of_total_calls": "0.04%"
15+
}
16+
]
17+
}

tests/test_call_feedback.py

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from nose.tools import assert_equal
44
from mock import Mock, patch, ANY
55
from tools import create_mock_json
6-
from twilio.rest.resources import Call
6+
from twilio.rest.resources import Call, Calls
77

88
AUTH = ('foo', 'bar')
99

@@ -50,3 +50,23 @@ def test_create_call_feedback(self, request):
5050
data=exp_data, auth=AUTH,
5151
timeout=ANY,
5252
)
53+
54+
55+
class CallFeedbackSummaryTest(unittest.TestCase):
56+
57+
@patch('twilio.rest.resources.base.make_twilio_request')
58+
def test_get_call_feedback_summary(self, request):
59+
resp = create_mock_json('tests/resources/call_feedback_summary.json')
60+
request.return_value = resp
61+
62+
base_uri = 'https://api.twilio.com/2010-04-01/Accounts/AC123'
63+
account_sid = 'AC123'
64+
auth = (account_sid, "token")
65+
66+
calls = Calls(base_uri, auth)
67+
uri = "%s/Calls/Summary" % base_uri
68+
feedback = calls.summary.get()
69+
assert_equal(10200, feedback.call_count)
70+
assert_equal(729, feedback.call_feedback_count)
71+
72+
request.assert_called_with('GET', uri, params={}, auth=auth)

twilio/rest/resources/call_feedback.py

Lines changed: 52 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,9 @@ class CallFeedback(InstanceResource):
99

1010
def __init__(self, parent):
1111
self.parent = parent
12-
super(InstanceResource, self).__init__(
13-
parent.uri,
14-
parent.auth,
15-
parent.timeout,
12+
super(CallFeedback, self).__init__(
13+
parent,
14+
None,
1615
)
1716

1817

@@ -42,9 +41,10 @@ def create(self, **kwargs):
4241
def get(self, **kwargs):
4342
""" Get the feedback for this call
4443
45-
Usage:
44+
Usage:
45+
46+
.. code-block:: python
4647
47-
.. code-block:: python
4848
feedback = client.calls.get("CA123").feedback
4949
print feedback.issues
5050
@@ -57,7 +57,52 @@ def get(self, **kwargs):
5757

5858
def load_instance(self, data):
5959
# Overridden because CallFeedback instances
60-
# don't contain sids :(
60+
# don't contain sids
61+
instance = self.instance(self)
62+
instance.load(data)
63+
return instance
64+
65+
66+
class CallFeedbackSummaryInstance(InstanceResource):
67+
68+
def __init__(self, parent):
69+
self.parent = parent
70+
super(CallFeedbackSummaryInstance, self).__init__(
71+
parent,
72+
None,
73+
)
74+
75+
76+
class CallFeedbackSummary(ListResource):
77+
78+
name = "Summary"
79+
key = "Feedback"
80+
instance = CallFeedbackSummaryInstance
81+
82+
def __init__(self, parent, *args, **kwargs):
83+
super(CallFeedbackSummary, self).__init__(*args, **kwargs)
84+
self.base_uri = parent.uri
85+
86+
def get(self, **kwargs):
87+
""" Get the feedback summary for calls on this account
88+
89+
Usage:
90+
91+
.. code-block:: python
92+
93+
summary = client.calls.summary.get()
94+
print summary.quality_score_average
95+
96+
:rtype: :class:`~twilio.rest.resources.InstanceResource`
97+
:raises: a :exc:`~twilio.TwilioRestException` if the request fails
98+
"""
99+
params = transform_params(kwargs)
100+
_, data = self.request('GET', self.uri, params=params)
101+
return self.load_instance(data)
102+
103+
def load_instance(self, data):
104+
# Overridden because CallFeedback summaries
105+
# do not contain sids
61106
instance = self.instance(self)
62107
instance.load(data)
63108
return instance

twilio/rest/resources/calls.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
from .notifications import Notifications
22
from .recordings import Recordings
3-
from twilio.rest.resources.call_feedback import CallFeedbackFactory
3+
from twilio.rest.resources.call_feedback import (
4+
CallFeedbackFactory,
5+
CallFeedbackSummary,
6+
) 8F4E
47
from .util import normalize_dates, parse_date
58
from . import InstanceResource, ListResource
69

@@ -54,6 +57,11 @@ class Calls(ListResource):
5457
name = "Calls"
5558
instance = Call
5659

60+
def __init__(self, *args, **kwargs):
61+
super(Calls, self).__init__(*args, **kwargs)
62+
63+
self.summary = CallFeedbackSummary(self, *args, **kwargs)
64+
5765
@normalize_dates
5866
def list(self, from_=None, ended_after=None,
5967
ended_before=None, ended=None, started_before=None,

0 commit comments

Comments
 (0)
0