1# coding=utf-8
2r"""
3This code was generated by
4\ / _    _  _|   _  _
5 | (_)\/(_)(_|\/| |(/_  v1.0.0
6      /       /
7"""
8
9from twilio.base import deserialize
10from twilio.base import serialize
11from twilio.base import values
12from twilio.base.instance_context import InstanceContext
13from twilio.base.instance_resource import InstanceResource
14from twilio.base.list_resource import ListResource
15from twilio.base.page import Page
16
17
18class FeedbackSummaryList(ListResource):
19
20    def __init__(self, version, account_sid):
21        """
22        Initialize the FeedbackSummaryList
23
24        :param Version version: Version that contains the resource
25        :param account_sid: The SID of the Account that created this resource
26
27        :returns: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryList
28        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryList
29        """
30        super(FeedbackSummaryList, self).__init__(version)
31
32        # Path Solution
33        self._solution = {'account_sid': account_sid, }
34        self._uri = '/Accounts/{account_sid}/Calls/FeedbackSummary.json'.format(**self._solution)
35
36    def create(self, start_date, end_date, include_subaccounts=values.unset,
37               status_callback=values.unset, status_callback_method=values.unset):
38        """
39        Create the FeedbackSummaryInstance
40
41        :param date start_date: Only include feedback given on or after this date
42        :param date end_date: Only include feedback given on or before this date
43        :param bool include_subaccounts: `true` includes feedback from the specified account and its subaccounts
44        :param unicode status_callback: The URL that we will request when the feedback summary is complete
45        :param unicode status_callback_method: The HTTP method we use to make requests to the StatusCallback URL
46
47        :returns: The created FeedbackSummaryInstance
48        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryInstance
49        """
50        data = values.of({
51            'StartDate': serialize.iso8601_date(start_date),
52            'EndDate': serialize.iso8601_date(end_date),
53            'IncludeSubaccounts': include_subaccounts,
54            'StatusCallback': status_callback,
55            'StatusCallbackMethod': status_callback_method,
56        })
57
58        payload = self._version.create(method='POST', uri=self._uri, data=data, )
59
60        return FeedbackSummaryInstance(self._version, payload, account_sid=self._solution['account_sid'], )
61
62    def get(self, sid):
63        """
64        Constructs a FeedbackSummaryContext
65
66        :param sid: A string that uniquely identifies this feedback summary resource
67
68        :returns: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryContext
69        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryContext
70        """
71        return FeedbackSummaryContext(self._version, account_sid=self._solution['account_sid'], sid=sid, )
72
73    def __call__(self, sid):
74        """
75        Constructs a FeedbackSummaryContext
76
77        :param sid: A string that uniquely identifies this feedback summary resource
78
79        :returns: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryContext
80        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryContext
81        """
82        return FeedbackSummaryContext(self._version, account_sid=self._solution['account_sid'], sid=sid, )
83
84    def __repr__(self):
85        """
86        Provide a friendly representation
87
88        :returns: Machine friendly representation
89        :rtype: str
90        """
91        return '<Twilio.Api.V2010.FeedbackSummaryList>'
92
93
94class FeedbackSummaryPage(Page):
95
96    def __init__(self, version, response, solution):
97        """
98        Initialize the FeedbackSummaryPage
99
100        :param Version version: Version that contains the resource
101        :param Response response: Response from the API
102        :param account_sid: The SID of the Account that created this resource
103
104        :returns: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryPage
105        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryPage
106        """
107        super(FeedbackSummaryPage, self).__init__(version, response)
108
109        # Path Solution
110        self._solution = solution
111
112    def get_instance(self, payload):
113        """
114        Build an instance of FeedbackSummaryInstance
115
116        :param dict payload: Payload response from the API
117
118        :returns: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryInstance
119        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryInstance
120        """
121        return FeedbackSummaryInstance(self._version, payload, account_sid=self._solution['account_sid'], )
122
123    def __repr__(self):
124        """
125        Provide a friendly representation
126
127        :returns: Machine friendly representation
128        :rtype: str
129        """
130        return '<Twilio.Api.V2010.FeedbackSummaryPage>'
131
132
133class FeedbackSummaryContext(InstanceContext):
134
135    def __init__(self, version, account_sid, sid):
136        """
137        Initialize the FeedbackSummaryContext
138
139        :param Version version: Version that contains the resource
140        :param account_sid: The unique sid that identifies this account
141        :param sid: A string that uniquely identifies this feedback summary resource
142
143        :returns: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryContext
144        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryContext
145        """
146        super(FeedbackSummaryContext, self).__init__(version)
147
148        # Path Solution
149        self._solution = {'account_sid': account_sid, 'sid': sid, }
150        self._uri = '/Accounts/{account_sid}/Calls/FeedbackSummary/{sid}.json'.format(**self._solution)
151
152    def fetch(self):
153        """
154        Fetch the FeedbackSummaryInstance
155
156        :returns: The fetched FeedbackSummaryInstance
157        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryInstance
158        """
159        payload = self._version.fetch(method='GET', uri=self._uri, )
160
161        return FeedbackSummaryInstance(
162            self._version,
163            payload,
164            account_sid=self._solution['account_sid'],
165            sid=self._solution['sid'],
166        )
167
168    def delete(self):
169        """
170        Deletes the FeedbackSummaryInstance
171
172        :returns: True if delete succeeds, False otherwise
173        :rtype: bool
174        """
175        return self._version.delete(method='DELETE', uri=self._uri, )
176
177    def __repr__(self):
178        """
179        Provide a friendly representation
180
181        :returns: Machine friendly representation
182        :rtype: str
183        """
184        context = ' '.join('{}={}'.format(k, v) for k, v in self._solution.items())
185        return '<Twilio.Api.V2010.FeedbackSummaryContext {}>'.format(context)
186
187
188class FeedbackSummaryInstance(InstanceResource):
189
190    class Status(object):
191        QUEUED = "queued"
192        IN_PROGRESS = "in-progress"
193        COMPLETED = "completed"
194        FAILED = "failed"
195
196    def __init__(self, version, payload, account_sid, sid=None):
197        """
198        Initialize the FeedbackSummaryInstance
199
200        :returns: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryInstance
201        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryInstance
202        """
203        super(FeedbackSummaryInstance, self).__init__(version)
204
205        # Marshaled Properties
206        self._properties = {
207            'account_sid': payload.get('account_sid'),
208            'call_count': deserialize.integer(payload.get('call_count')),
209            'call_feedback_count': deserialize.integer(payload.get('call_feedback_count')),
210            'date_created': deserialize.rfc2822_datetime(payload.get('date_created')),
211            'date_updated': deserialize.rfc2822_datetime(payload.get('date_updated')),
212            'end_date': deserialize.iso8601_date(payload.get('end_date')),
213            'include_subaccounts': payload.get('include_subaccounts'),
214            'issues': payload.get('issues'),
215            'quality_score_average': deserialize.decimal(payload.get('quality_score_average')),
216            'quality_score_median': deserialize.decimal(payload.get('quality_score_median')),
217            'quality_score_standard_deviation': deserialize.decimal(payload.get('quality_score_standard_deviation')),
218            'sid': payload.get('sid'),
219            'start_date': deserialize.iso8601_date(payload.get('start_date')),
220            'status': payload.get('status'),
221        }
222
223        # Context
224        self._context = None
225        self._solution = {'account_sid': account_sid, 'sid': sid or self._properties['sid'], }
226
227    @property
228    def _proxy(self):
229        """
230        Generate an instance context for the instance, the context is capable of
231        performing various actions.  All instance actions are proxied to the context
232
233        :returns: FeedbackSummaryContext for this FeedbackSummaryInstance
234        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryContext
235        """
236        if self._context is None:
237            self._context = FeedbackSummaryContext(
238                self._version,
239                account_sid=self._solution['account_sid'],
240                sid=self._solution['sid'],
241            )
242        return self._context
243
244    @property
245    def account_sid(self):
246        """
247        :returns: The unique sid that identifies this account
248        :rtype: unicode
249        """
250        return self._properties['account_sid']
251
252    @property
253    def call_count(self):
254        """
255        :returns: The total number of calls
256        :rtype: unicode
257        """
258        return self._properties['call_count']
259
260    @property
261    def call_feedback_count(self):
262        """
263        :returns: The total number of calls with a feedback entry
264        :rtype: unicode
265        """
266        return self._properties['call_feedback_count']
267
268    @property
269    def date_created(self):
270        """
271        :returns: The date this resource was created
272        :rtype: datetime
273        """
274        return self._properties['date_created']
275
276    @property
277    def date_updated(self):
278        """
279        :returns: The date this resource was last updated
280        :rtype: datetime
281        """
282        return self._properties['date_updated']
283
284    @property
285    def end_date(self):
286        """
287        :returns: The latest feedback entry date in the summary
288        :rtype: date
289        """
290        return self._properties['end_date']
291
292    @property
293    def include_subaccounts(self):
294        """
295        :returns: Whether the feedback summary includes subaccounts
296        :rtype: bool
297        """
298        return self._properties['include_subaccounts']
299
300    @property
301    def issues(self):
302        """
303        :returns: Issues experienced during the call
304        :rtype: list[dict]
305        """
306        return self._properties['issues']
307
308    @property
309    def quality_score_average(self):
310        """
311        :returns: The average QualityScore of the feedback entries
312        :rtype: unicode
313        """
314        return self._properties['quality_score_average']
315
316    @property
317    def quality_score_median(self):
318        """
319        :returns: The median QualityScore of the feedback entries
320        :rtype: unicode
321        """
322        return self._properties['quality_score_median']
323
324    @property
325    def quality_score_standard_deviation(self):
326        """
327        :returns: The standard deviation of the quality scores
328        :rtype: unicode
329        """
330        return self._properties['quality_score_standard_deviation']
331
332    @property
333    def sid(self):
334        """
335        :returns: A string that uniquely identifies this feedback entry
336        :rtype: unicode
337        """
338        return self._properties['sid']
339
340    @property
341    def start_date(self):
342        """
343        :returns: The earliest feedback entry date in the summary
344        :rtype: date
345        """
346        return self._properties['start_date']
347
348    @property
349    def status(self):
350        """
351        :returns: The status of the feedback summary
352        :rtype: FeedbackSummaryInstance.Status
353        """
354        return self._properties['status']
355
356    def fetch(self):
357        """
358        Fetch the FeedbackSummaryInstance
359
360        :returns: The fetched FeedbackSummaryInstance
361        :rtype: twilio.rest.api.v2010.account.call.feedback_summary.FeedbackSummaryInstance
362        """
363        return self._proxy.fetch()
364
365    def delete(self):
366        """
367        Deletes the FeedbackSummaryInstance
368
369        :returns: True if delete succeeds, False otherwise
370        :rtype: bool
371        """
372        return self._proxy.delete()
373
374    def __repr__(self):
375        """
376        Provide a friendly representation
377
378        :returns: Machine friendly representation
379        :rtype: str
380        """
381        context = ' '.join('{}={}'.format(k, v) for k, v in self._solution.items())
382        return '<Twilio.Api.V2010.FeedbackSummaryInstance {}>'.format(context)
383