8000 Merge branch 'usage_trigger_support' · ryanhorn/twilio-python@164d8fc · GitHub
[go: up one dir, main page]

Skip to content

Commit 164d8fc

Browse files
committed
Merge branch 'usage_trigger_support'
2 parents 263e649 + 2942cd7 commit 164d8fc

File tree

7 files changed

+387
-0
lines changed

7 files changed

+387
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
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/Records.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+
"first_page_uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records.json?Page=0&PageSize=50",
13+
"usage_records": [
14+
{
15+
"category": "calleridlookups",
16+
"subresource_uris": [
17+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/AllTime.json?Category=calleridlookups",
18+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Today.json?Category=calleridlookups",
19+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Yesterday.json?Category=calleridlookups",
20+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/ThisMonth.json?Category=calleridlookups",
21+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/LastMonth.json?Category=calleridlookups",
22+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/ThisYear.json?Category=calleridlookups",
23+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/LastYear.json?Category=calleridlookups",
24+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Daily.json?Category=calleridlookups",
25+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Monthly.json?Category=calleridlookups",
26+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Yearly.json?Category=calleridlookups"
27+
],
28+
"description": "Caller ID lookups",
29+
"end_date": "2012-09-29",
30+
"usage_unit": "Lookups",
31+
"price": "0",
32+
"uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records.json?Category=calleridlookups&StartDate=2012-09-22&EndDate=2012-09-29",
33+
"number": "0",
34+
"account_sid": "ACed70abd024d3f57a4027b5dc2ca88d5b",
35+
"trigger_uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Triggers.json?UsageCategory=calleridlookups",
36+
"usage": "0",
37+
"start_date": "2012-09-22"
38+
},
39+
{
40+
"category": "recordings",
41+
"subresource_uris": [
42+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/AllTime.json?Category=recordings",
43+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Today.json?Category=recordings",
44+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Yesterday.json?Category=recordings",
45+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/ThisMonth.json?Category=recordings",
46+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/LastMonth.json?Category=recordings",
47+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/ThisYear.json?Category=recordings",
48+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/LastYear.json?Category=recordings",
49+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Daily.json?Category=recordings",
50+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Monthly.json?Category=recordings",
51+
"/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records/Yearly.json?Category=recordings"
52+
],
53+
"description": "Call recordings",
54+
"end_date": "2012-09-29",
55+
"usage_unit": "Minutes",
56+
"price": "0",
57+
"uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Records.json?Category=recordings&StartDate=2012-09-22&EndDate=2012-09-29",
58+
"number": "0",
59+
"account_sid": "ACed70abd024d3f57a4027b5dc2ca88d5b",
60+
"trigger_uri": "/2010-04-01/Accounts/ACed70abd024d3f57a4027b5dc2ca88d5b/Usage/Triggers.json?UsageCategory=recordings",
61+
"usage": "0",
62+
"start_date": 6D40 "2012-09-22"
63+
}
64+
]
65+
}
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.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
from mock import patch
2+
from nose.tools import raises
3+
from tools import create_mock_json
4+
from twilio.rest.resources import Usage
5+
6+
BASE_URI = "https://api.twilio.com/2010-04-01/Accounts/AC123"
7+
ACCOUNT_SID = "AC123"
8+
AUTH = (ACCOUNT_SID, "token")
9+
10+
usage = Usage(BASE_URI, AUTH)
11+
12+
13+
@patch("twilio.rest.resources.base.make_twilio_request")
14+
def test_triggers_create(request):
15+
resp = create_mock_json("tests/resources/usage_triggers_instance.json")
16+
resp.status_code = 201
17+
request.return_value = resp
18+
19+
usage.triggers.create(
20+
friendly_name="foo",
21+
usage_category="sms",
22+
trigger_by="count",
23+
recurring="price",
24+
trigger_value="10.00",
25+
callback_url="http://www.example.com",
26+
callback_method="POST"
27+
)
28+
29+
uri = "%s/Usage/Triggers" % BASE_URI
30+
request.assert_called_with("POST", uri, data={
31+
"FriendlyName": "foo",
32+
"UsageCategory": "sms",
33+
"TriggerBy": "count",
34+
"Recurring": "price",
35+
"TriggerValue": "10.00",
36+
"CallbackUrl": "http://www.example.com",
37+
"CallbackMethod": "POST"
38+
}, auth=AUTH)
39+
40+
41+
@patch("twilio.rest.resources.base.make_twilio_request")
42+
def test_triggers_paging(request):
43+
resp = create_mock_json("tests/resources/usage_triggers_list.json")
44+
request.return_value = resp
45+
46+
uri = "%s/Usage/Triggers" % BASE_URI
47+
usage.triggers.list(
48+
recurring="daily",
49+
usage_category="sms",
50+
trigger_by="count")
51+
52+
request.assert_called_with("GET", uri, params={
53+
"Recurring": "daily",
54+
"UsageCategory": "sms",
55+
"TriggerBy": "count"
56+
}, auth=AUTH)
57+
58+
59+
@patch("twilio.rest.resources.base.make_twilio_request")
60+
def test_records_paging(request):
61+
resp = create_mock_json("tests/resources/usage_records_list.json")
62+
request.return_value = resp
63+
64+
uri = "%s/Usage/Records" % BASE_URI
65+
usage.records.list(
66+
start_date="2012-10-12",
67+
end_date="2012-10-13",
68+
category="sms")
69+
70+
request.assert_called_with("GET", uri, params={
71+
"StartDate": "2012-10-12",
72+
"EndDate": "2012-10-13",
73+
"Category": "sms"
74+
}, auth=AUTH)
75+
76+
77+
@raises(AttributeError)
78+
def test_records_create():
79+
usage.records.all.create
80+
81+
82+
@raises(AttributeError)
83+
def test_records_delete():
84+
usage.records.all.delete
85+
86+
87+
@raises(AttributeError)
88+
def test_records_get():
89+
usage.records.all.get('abc')

twilio/rest/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from twilio.rest.resources import PhoneNumbers
1818
from twilio.rest.resources import Conferences
1919
from twilio.rest.resources import Sandboxes
20+
from twilio.rest.resources import Usage
2021
from urllib import urlencode
2122
from urlparse import urljoin
2223

@@ -129,6 +130,7 @@ def __init__(self, account=None, token=None, base="https://api.twilio.com",
129130
self.conferences = Conferences(account_uri, auth)
130131
self.queues < 8B7D span class=pl-c1>= Queues(account_uri, auth)
131132
self.sandboxes = Sandboxes(account_uri, auth)
133+
self.usage = Usage(account_uri, auth)
132134

133135
self.auth = auth
134136
self.account_uri = account_uri

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 import Usage

0 commit comments

Comments
 (0)
0