8000 Added usage record subresources, moved usage resources under a single ns · Stackdriver/twilio-python@accb536 · 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 accb536

Browse files
committed
Added usage record subresources, moved usage resources under a single ns
1 parent f30d690 commit accb536

File tree

6 files changed

+134
-91
lines changed

6 files changed

+134
-91
lines changed

tests/test_usage_triggers.py renamed to tests/test_usage.py

Lines changed: 40 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
11
from mock import patch
2+
from nose.tools import raises
23
from tools import create_mock_json
3-
from twilio.rest.resources import UsageTriggers
4+
from twilio.rest.resources import Usage
45

56
BASE_URI = "https://api.twilio.com/2010-04-01/Accounts/AC123"
67
ACCOUNT_SID = "AC123"
78
AUTH = (ACCOUNT_SID, "token")
89

9-
list_resource = UsageTriggers(BASE_URI, AUTH)
10+
usage = Usage(BASE_URI, AUTH)
1011

1112

1213
@patch("twilio.rest.resources.base.make_twilio_request")
13-
def test_create_trigger(request):
14+
def test_triggers_create(request):
1415
resp = create_mock_json("tests/resources/usage_triggers_instance.json")
1516
resp.status_code = 201
1617
request.return_value = resp
1718

18-
list_resource.create(
19+
usage.triggers.create(
1920
friendly_name="foo",
2021
usage_category="sms",
2122
trigger_by="count",
@@ -38,12 +39,12 @@ def test_create_trigger(request):
3839

3940

4041
@patch("twilio.rest.resources.base.make_twilio_request")
41-
def test_paging(request):
42+
def test_triggers_paging(request):
4243
resp = create_mock_json("tests/resources/usage_triggers_list.json")
4344
request.return_value = resp
4445

4546
uri = "%s/Usage/Triggers" % BASE_URI
46-
list_resource.list(
47+
usage.triggers.list(
4748
recurring="daily",
4849
usage_category="sms",
4950
trigger_by="count")
@@ -53,3 +54,36 @@ def test_paging(request):
5354
"UsageCategory": "sms",
5455
"TriggerBy": "count"
5556
}, 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.all.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')

tests/test_usage_records.py

Lines changed: 0 additions & 43 deletions
This file was deleted.

twilio/rest/__init__.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +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 UsageTriggers
21-
from twilio.rest.resources import UsageRecords
20+
from twilio.rest.resources import Usage
2221
from urllib import urlencode
2322
from urlparse import urljoin
2423

@@ -131,8 +130,7 @@ def __init__(self, account=None, token=None, base="https://api.twilio.com",
131130
self.conferences = Conferences(account_uri, auth)
132131
self.queues = Queues(account_uri, auth)
133132
self.sandboxes = Sandboxes(account_uri, auth)
134-
self.usage_triggers = UsageTriggers(account_uri, auth)
135-
self.usage_records = UsageRecords(account_uri, auth)
133+
self.usage = Usage(account_uri, auth)
136134

137135
self.auth = auth
138136
self.account_uri = account_uri

twilio/rest/resources/__init__.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,4 @@
4646
)
4747
from twilio.rest.resources.accounts import Account, Accounts
4848

49-
from twilio.rest.resources.usage_triggers import UsageTriggers
50-
51-
from twilio.rest.resources.usage_records import UsageRecords
49+
from twilio.rest.resources.usage import Usage

twilio/rest/resources/usage_triggers.py renamed to twilio/rest/resources/usage.py

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from twilio.rest.resources import InstanceResource, ListResource
22

3-
43
class UsageTrigger(InstanceResource):
54
""" A usage trigger resource """
65

@@ -63,3 +62,94 @@ def create(self, **kwargs):
6362
default is POST.
6463
"""
6564
return self.create_instance(kwargs)
65+
66+
67+
class UsageRecord(InstanceResource):
68+
""" A usage record resource """
69+
70+
71+
class UsageRecords(ListResource):
72+
name = "Usage/Records"
73+
instance = UsageRecord
74+
key = "usage_records"
75+
76+
def list(self, **kwargs):
77+
"""
78+
Returns a page of :class:`UsageRecord` resources as a list. For paging
79+
information see :class:`ListResource`
80+
81+
:param category: Only include usage of this usage category.
82+
:param start_date: Only include usage that has occurred on or after
83+
this date. Format is YYYY-MM-DD. All dates are in
84+
GMT.
85+
:param end_date: Only include usage that has occurred on or before this
86+
date. Format is YYYY-MM-DD. All dates are in GMT.
87+
"""
88+
return self.get_instances(kwargs)
89+
90+
def get(self, *args, **kwargs):
91+
raise AttributeError('Unsupported in UsageRecords')
92+
93+
def load_instance(self, data):
94+
instance = self.instance(self, "Resource")
95+
instance.load(data)
96+
instance.load_subresources()
97+
return instance
98+
99+
100+
class UsageRecordsDaily(UsageRecords):
101+
name = "Usage/Records/Daily"
102+
103+
104+
class UsageRecordsMonthly(UsageRecords):
105+
name = "Usage/Records/Monthly"
106+
107+
108+
class UsageRecordsYearly(UsageRecords):
109+
name = "Usage/Records/Yearly"
110+
111+
112+
class UsageRecordsToday(UsageRecords):
113+
name = "Usage/Records/Today"
114+
115+
116+
class UsageRecordsYesterday(UsageRecords):
117+
name = "Usage/Records/Yesterday"
118+
119+
120+
class UsageRecordsThisMonth(UsageRecords):
121+
name = "Usage/Records/ThisMonth"
122+
123+
124+
class UsageRecordsLastMonth(UsageRecords):
125+
name = "Usage/Records/LastMonth"
126+
127+
UsageRecord.subresources = [
128+
UsageRecordsDaily,
129+
UsageRecordsMonthly,
130+
UsageRecordsYearly,
131+
UsageRecordsToday,
132+
UsageRecordsYesterday,
133+
UsageRecordsThisMonth,
134+
UsageRecordsLastMonth
135+
]
136+
137+
class Records(object):
138+
def __init__(self, base_uri, auth):
139+
self.all = UsageRecords(base_uri, auth)
140+
self.daily = UsageRecordsDaily(base_uri, auth)
141+
self.monthly = UsageRecordsMonthly(base_uri, auth)
142+
self.yearly = UsageRecordsYearly(base_uri, auth)
143+
self.today = UsageRecordsToday(base_uri, auth)
144+
self.yesterday = UsageRecordsYesterday(base_uri, auth)
145+
self.this_month = UsageRecordsThisMonth(base_uri, auth)
146+
self.last_month = UsageRecordsLastMonth(base_uri, auth)
147+
148+
class Usage(object):
149+
"""
150+
Holds all the specific Usage list resources
151+
"""
152+
153+
def __init__(self, base_uri, auth):
154+
self.records = Records(base_uri, auth)
155+
self.triggers = UsageTriggers(base_uri, auth)

twilio/rest/resources/usage_records.py

Lines changed: 0 additions & 34 deletions
This file was deleted.

0 commit comments

Comments
 (0)
0