8000 Usage trigger support · Stackdriver/twilio-python@e1a934d · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Feb 1, 2018. It is now read-only.

Commit e1a934d

Browse files
committed
Usage trigger support
1 parent 1a64fca commit e1a934d

File tree

5 files changed

+180
-0
lines changed

5 files changed

+180
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"sid": "UT33c6aeeba34e48f38d6899ea5b765ad4",
3+
"date_updated": "2012-09-29 12:47:54",
4+
"current_usage_value": "7",
5+
"friendly_name": "Trigger for calls at usage of 500",
6+
"uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Triggers/UT33c6aeeba34e48f38d6899ea5b765ad4/UT33c6aeeba34e48f38d6899ea5b765ad4.json",
7+
"usage_record_uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records.json?Category=calls",
8+
"trigger_by": "usage",
9+
"callback_method": "POST",
10+
"date_created": "2012-09-29 12:45:43",
11+
"callback_url": "http://www.example.com/",
12+
"recurring": "daily",
13+
"usage_category": "calls",
14+
"trigger_value": "500.000000"
15+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"page": 0,
3+
"num_pages": 1,
4+
"page_size": 50,
5+
"total": 2,
6+
"start": 0,
7+
"end": 1,
8+
"uri": "\/2010-04-01\/Accounts\/AC4bf2dafbed59a5733d2c1c1c69a83a28\/Usage/Triggers.json?Page=0&PageSize=50",
9+
"previous_page_uri": null,
10+
"next_page_uri": "\/2010-04-01\/Accounts\/AC4bf2dafbed59a5733d2c1c1c69a83a28\/Calls.json?Page=1&PageSize=50",
11+
"last_page_uri": "\/2010-04-01\/Accounts\/AC4bf2dafbed59a5733d2c1c1c69a83a28\/Calls.json?Page=10&PageSize=50",
12+
"usage_triggers": [
13+
{
14+
"sid": "UT33c6aeeba34e48f38d6899ea5b765ad4",
15+
"date_updated": "2012-09-29 12:47:54",
16+
"current_usage_value": "7",
17+
"friendly_name": "Trigger for calls at usage of 500",
18+
"uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Triggers/UT33c6aeeba34e48f38d6899ea5b765ad4/UT33c6aeeba34e48f38d6899ea5b765ad4.json",
19+
"usage_record_uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records.json?Category=calls",
20+
"trigger_by": "usage",
21+
"callback_method": "POST",
22+
"date_created": "2012-09-29 12:45:43",
23+
"callback_url": "http://www.example.com/",
24+
"recurring": "daily",
25+
"usage_category": "calls",
26+
"trigger_value": "500.000000"
27+
}, {
28+
"sid": "UT33c6aeeba34e48f38d6899ea5b765ad5",
29+
"date_updated": "2012-09-30 12:47:54",
30+
"current_usage_value": "7",
31+
"friendly_name": "Trigger for calls at usage of 500",
32+
"uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Triggers/UT33c6aeeba34e48f38d6899ea5b765ad4/UT33c6aeeba34e48f38d6899ea5b765ad4.json",
33+
"usage_record_uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records.json?Category=calls",
34+
"trigger_by": "usage",
35+
"callback_method": "POST",
36+
"date_created": "2012-09-30 12:45:43",
37+
"callback_url": "http://www.example.com/",
38+
"recurring": "daily",
39+
"usage_category": "calls",
40+
"trigger_value": "500.000000"
41+
}
42+
]
43+
}

tests/test_usage_triggers.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
from mock import patch
2+
from tools import create_mock_json
3+
from twilio.rest.resources import UsageTriggers
4+
5+
BASE_URI = "https://api.twilio.com/2010-04-01/Accounts/AC123"
6+
ACCOUNT_SID = "AC123"
7+
AUTH = (ACCOUNT_SID, "token")
8+
9+
list_resource = UsageTriggers(BASE_URI, AUTH)
10+
11+
12+
@patch("twilio.rest.resources.base.make_twilio_request")
13+
def test_create_trigger(request):
14+
resp = create_mock_json("tests/resources/usage_triggers_instance.json")
15+
resp.status_code = 201
16+
request.return_value = resp
17+
18+
list_resource.create(
19+
friendly_name="foo",
20+
usage_category="sms",
21+
trigger_by="count",
22+
recurring="price",
23+
trigger_value="10.00",
24+
callback_url="http://www.example.com",
25+
callback_method="POST"
26+
)
27+
28+
uri = "%s/Usage/Triggers" % BASE_URI
29+
request.assert_called_with("POST", uri, data={
30+
"FriendlyName": "foo",
31+
"UsageCategory": "sms",
32+
"TriggerBy": "count",
33+
"Recurring": "price",
34+
"TriggerValue": "10.00",
35+
"CallbackUrl": "http://www.example.com",
36+
"CallbackMethod": "POST"
37+
}, auth=AUTH)
38+
39+
40+
@patch("twilio.rest.resources.base.make_twilio_request")
41+
def test_paging(request):
42+
resp = create_mock_json("tests/resources/usage_triggers_list.json")
43+
request.return_value = resp
44+
45+
uri = "%s/Usage/Triggers" % BASE_URI
46+
list_resource.list(
47+
recurring="daily",
48+
usage_category="sms",
49+
trigger_by="count")
50+
51+
request.assert_called_with("GET", uri, params={
52+
"Recurring": "daily",
53+
"UsageCategory": "sms",
54+
"TriggerBy": "count"
55+
}, auth=AUTH)

twilio/rest/resources/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,5 @@
4545
Application, Applications
4646
)
4747
from twilio.rest.resources.accounts import Account, Accounts
48+
49+
from twilio.rest.resources.usage_triggers import UsageTriggers
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
from twilio.rest.resources import InstanceResource, ListResource
2+
3+
4+
class UsageTrigger(InstanceResource):
5+
""" A usage trigger resource """
6+
7+
def update(self, **kwargs):
8+
"""
9+
Update this usage trigger
10+
"""
11+
return self.parent.update(self.sid, **kwargs)
12+
13+
def delete(self):
14+
"""
15+
Delete this usage trigger
16+
"""
17+
return self.parent.delete(self.sid)
18+
19+
20+
class UsageTriggers(ListResource):
21+
name = "Usage/Triggers"
22+
instance = UsageTrigger
23+
key = "usage_triggers"
24+
25+
def list(self, **kwargs):
26+
"""
27+
Returns a page of :class:`UsageTrigger` resources as a list. For paging
28+
information see :class:`ListResource`
29+
30+
:param recurring: Only show UsageTriggers that count over this
31+
interval. One of daily, monthly, or yearly. To
32+
retrieve non-recurring triggers, leave this empty or
33+
use alltime.
34+
:param usage_category: Only show UsageTriggers that watch this usage
35+
category. Must be one of the supported usage
36+
categories.
37+
:trigger_by: Only show UsageTriggers that trigger by this field in the
38+
UsageRecord. Must be one of: count, usage, or price as
39+
described in the UsageRecords documentation.
40+
"""
41+
return self.get_instances(kwargs)
42+
43+
def create(self, **kwargs):
44+
"""
45+
Create an :class:`Application` with any of these optional parameters.
46+
47+
:param friendly_name: A human readable description of the application,
48+
with maximum length 64 characters.
49+
:param usage_category: The trigger will watch this usage category.
50+
:param trigger_value: The trigger will fire when usage reaches this
51+
value.
52+
:param callback_url: Twilio will make a request to this url when the
53+
trigger fires.
54+
:param trigger_by: The field in the UsageRecord that will fire the
55+
trigger. One of count, usage, or price as described
56+
in the UsageRecords documentation. The default is
57+
usage.
58+
:param recurring: The interval the trigger will count over. Must be one
59+
of: daily, monthly, or yearly. Omit this to create a
60+
non-recurring trigger.
61+
:param callback_method: Twilio will use this HTTP method when making a
62+
request to the CallbackUrl. GET or POST. The
63+
default is POST.
64+
"""
65+
return self.create_instance(kwargs)

0 commit comments

Comments
 (0)
0