Skip to content

Commit 187cb2e

Browse files
author
Alex Schworer
committed
Add Reports API methods
1 parent 91fd3ec commit 187cb2e

File tree

5 files changed

+117
-9
lines changed

5 files changed

+117
-9
lines changed

test/fixtures/report_all.json

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{
2+
"total": {
3+
"live": {
4+
"encoded_hours": 5,
5+
"stream_hours": 5
6+
},
7+
"vod": {
8+
"encoded_minutes": 6,
9+
"billable_minutes": 8
10+
}
11+
},
12+
"statistics": {
13+
"live": {
14+
"length": 2
15+
}
16+
}
17+
}

test/fixtures/report_live.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"total": {
3+
"encoded_hours": 5,
4+
"stream_hours": 5
5+
},
6+
"statistics": {
7+
"length": 5
8+
}
9+
}

test/fixtures/report_vod.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"total": {
3+
"encoded_minutes": 6,
4+
"billable_minutes": 8
5+
}
6+
}

test/test_reports.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import unittest
2+
from mock import patch
3+
4+
from test_util import TEST_API_KEY, load_response
5+
from zencoder import Zencoder
6+
7+
class TestReports(unittest.TestCase):
8+
def setUp(self):
9+
self.zen = Zencoder(api_key=TEST_API_KEY)
10+
11+
@patch("requests.Session.get")
12+
def test_reports_vod(self, get):
13+
get.return_value = load_response(200, 'fixtures/report_vod.json')
14+
15+
resp = self.zen.report.vod()
16+
17+
self.assertEquals(resp.code, 200)
18+
self.assertEquals(resp.body['total']['encoded_minutes'], 6)
19+
self.assertEquals(resp.body['total']['billable_minutes'], 8)
20+
21+
@patch("requests.Session.get")
22+
def test_reports_live(self, get):
23+
get.return_value = load_response(200, 'fixtures/report_live.json')
24+
25+
resp = self.zen.report.live()
26+
27+
self.assertEquals(resp.code, 200)
28+
self.assertEquals(resp.body['total']['stream_hours'], 5)
29+
self.assertEquals(resp.body['total']['encoded_hours'], 5)
30+
self.assertEquals(resp.body['statistics']['length'], 5)
31+
32+
@patch("requests.Session.get")
33+
def test_reports_all(self, get):
34+
get.return_value = load_response(200, 'fixtures/report_all.json')
35+
36+
resp = self.zen.report.live()
37+
38+
self.assertEquals(resp.code, 200)
39+
40+
self.assertEquals(resp.body['total']['live']['stream_hours'], 5)
41+
self.assertEquals(resp.body['total']['live']['encoded_hours'], 5)
42+
self.assertEquals(resp.body['total']['vod']['encoded_minutes'], 6)
43+
self.assertEquals(resp.body['total']['vod']['billable_minutes'], 8)
44+
self.assertEquals(resp.body['statistics']['live']['length'], 2)
45+
46+
if __name__ == "__main__":
47+
unittest.main()
48+

zencoder/core.py

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,21 @@ def __init__(self, *args, **kwargs):
340340
kwargs['resource_name'] = 'reports'
341341
super(Report, self).__init__(*args, **kwargs)
342342

343+
def __format(self, start_date=None, end_date=None, grouping=None):
344+
data = {'api_key': self.api_key}
345+
346+
date_format = '%Y-%m-%d'
347+
if start_date:
348+
data['from'] = datetime.strftime(start_date, date_format)
349+
350+
if end_date:
351+
data['to'] = datetime.strftime(end_date, date_format)
352+
353+
if grouping:
354+
data['grouping'] = grouping
355+
356+
return data
357+
343358
def minutes(self, start_date=None, end_date=None, grouping=None):
344359
"""
345360
Gets a detailed Report of encoded minutes and billable minutes for a
@@ -359,17 +374,30 @@ def minutes(self, start_date=None, end_date=None, grouping=None):
359374
yesterday)
360375
@param grouping: Minute usage for only one report grouping
361376
"""
362-
data = {'api_key': self.api_key}
363-
date_format = '%Y-%m-%d'
364-
if start_date:
365-
data['from'] = datetime.strftime(start_date, date_format)
366-
367-
if end_date:
368-
data['to'] = datetime.strftime(end_date, date_format)
369377

370-
if grouping:
371-
data['grouping'] = grouping
378+
data = self.__format(start_date, end_date)
372379

373380
url = self.base_url + '/minutes'
374381
return self.get(url, data=data)
375382

383+
def vod(self, start_date=None, end_date=None, grouping=None):
384+
""" Gets a report of VOD Usage """
385+
data = self.__format(start_date, end_date, grouping)
386+
387+
url = self.base_url + '/vod'
388+
return self.get(url, data=data)
389+
390+
def live(self, start_date=None, end_date=None, grouping=None):
391+
""" Gets a report of Live Usage """
392+
data = self.__format(start_date, end_date, grouping)
393+
394+
url = self.base_url + '/live'
395+
return self.get(url, data=data)
396+
397+
def all(self, start_date=None, end_date=None, grouping=None):
398+
""" Gets a report of both VOD and Live Usage """
399+
data = self.__format(start_date, end_date, grouping)
400+
401+
url = self.base_url + '/all'
402+
return self.get(url, data=data)
403+

0 commit comments

Comments
 (0)