diff --git a/test/fixtures/report_all.json b/test/fixtures/report_all.json new file mode 100644 index 0000000..c8f281f --- /dev/null +++ b/test/fixtures/report_all.json @@ -0,0 +1,17 @@ +{ + "total": { + "live": { + "encoded_hours": 5, + "stream_hours": 5 + }, + "vod": { + "encoded_minutes": 6, + "billable_minutes": 8 + } + }, + "statistics": { + "live": { + "length": 2 + } + } +} diff --git a/test/fixtures/report_all_date.json b/test/fixtures/report_all_date.json new file mode 100644 index 0000000..d374902 --- /dev/null +++ b/test/fixtures/report_all_date.json @@ -0,0 +1,38 @@ +{ + "statistics": { + "vod": [ + { + "encoded_minutes": 5, + "billable_minutes": 0, + "grouping": null, + "collected_on": "2013-05-13" + } + ], + "live": [ + { + "total_billable_hours": 2, + "stream_hours": 1, + "billable_stream_hours": 0, + "encoded_hours": 2, + "grouping": null, + "collected_on": "2013-05-13", + "billable_encoded_hours": 0, + "total_hours": 2 + } + ] + }, + "total": { + "vod": { + "encoded_minutes": 5, + "billable_minutes": 0 + }, + "live": { + "total_billable_hours": 2, + "stream_hours": 1, + "billable_stream_hours": 0, + "encoded_hours": 2, + "billable_encoded_hours": 0, + "total_hours": 2 + } + } +} diff --git a/test/fixtures/report_live.json b/test/fixtures/report_live.json new file mode 100644 index 0000000..76f1445 --- /dev/null +++ b/test/fixtures/report_live.json @@ -0,0 +1,9 @@ +{ + "total": { + "encoded_hours": 5, + "stream_hours": 5 + }, + "statistics": { + "length": 5 + } +} diff --git a/test/fixtures/report_vod.json b/test/fixtures/report_vod.json new file mode 100644 index 0000000..ac9fe85 --- /dev/null +++ b/test/fixtures/report_vod.json @@ -0,0 +1,6 @@ +{ + "total": { + "encoded_minutes": 6, + "billable_minutes": 8 + } +} diff --git a/test/test_reports.py b/test/test_reports.py new file mode 100644 index 0000000..6abb7d4 --- /dev/null +++ b/test/test_reports.py @@ -0,0 +1,70 @@ +import unittest +from mock import patch + +from test_util import TEST_API_KEY, load_response +from zencoder import Zencoder + +import datetime + +class TestReports(unittest.TestCase): + def setUp(self): + self.zen = Zencoder(api_key=TEST_API_KEY) + + @patch("requests.Session.get") + def test_reports_vod(self, get): + get.return_value = load_response(200, 'fixtures/report_vod.json') + + resp = self.zen.report.vod() + + self.assertEquals(resp.code, 200) + self.assertEquals(resp.body['total']['encoded_minutes'], 6) + self.assertEquals(resp.body['total']['billable_minutes'], 8) + + @patch("requests.Session.get") + def test_reports_live(self, get): + get.return_value = load_response(200, 'fixtures/report_live.json') + + resp = self.zen.report.live() + + self.assertEquals(resp.code, 200) + self.assertEquals(resp.body['total']['stream_hours'], 5) + self.assertEquals(resp.body['total']['encoded_hours'], 5) + self.assertEquals(resp.body['statistics']['length'], 5) + + @patch("requests.Session.get") + def test_reports_all(self, get): + get.return_value = load_response(200, 'fixtures/report_all.json') + + resp = self.zen.report.all() + + self.assertEquals(resp.code, 200) + + self.assertEquals(resp.body['total']['live']['stream_hours'], 5) + self.assertEquals(resp.body['total']['live']['encoded_hours'], 5) + self.assertEquals(resp.body['total']['vod']['encoded_minutes'], 6) + self.assertEquals(resp.body['total']['vod']['billable_minutes'], 8) + self.assertEquals(resp.body['statistics']['live']['length'], 2) + + @patch("requests.Session.get") + def test_reports_all_date_filter(self, get): + get.return_value = load_response(200, 'fixtures/report_all_date.json') + + start = datetime.date(2013, 5, 13) + end = datetime.date(2013, 5, 13) + resp = self.zen.report.all(start_date=start, end_date=end) + + self.assertEquals(resp.code, 200) + + self.assertEquals(resp.body['statistics']['vod'][0]['encoded_minutes'], 5) + self.assertEquals(resp.body['statistics']['vod'][0]['billable_minutes'], 0) + self.assertEquals(resp.body['statistics']['live'][0]['stream_hours'], 1) + self.assertEquals(resp.body['statistics']['live'][0]['total_hours'], 2) + + self.assertEquals(resp.body['total']['vod']['encoded_minutes'], 5) + self.assertEquals(resp.body['total']['vod']['billable_minutes'], 0) + self.assertEquals(resp.body['total']['live']['stream_hours'], 1) + self.assertEquals(resp.body['total']['live']['total_hours'], 2) + +if __name__ == "__main__": + unittest.main() + diff --git a/zencoder/core.py b/zencoder/core.py index 05b911d..a1bfd36 100644 --- a/zencoder/core.py +++ b/zencoder/core.py @@ -340,6 +340,21 @@ def __init__(self, *args, **kwargs): kwargs['resource_name'] = 'reports' super(Report, self).__init__(*args, **kwargs) + def __format(self, start_date=None, end_date=None, grouping=None): + data = {'api_key': self.api_key} + + date_format = '%Y-%m-%d' + if start_date: + data['from'] = start_date.strftime(date_format) + + if end_date: + data['to'] = end_date.strftime(date_format) + + if grouping: + data['grouping'] = grouping + + return data + def minutes(self, start_date=None, end_date=None, grouping=None): """ 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): yesterday) @param grouping: Minute usage for only one report grouping """ - data = {'api_key': self.api_key} - date_format = '%Y-%m-%d' - if start_date: - data['from'] = datetime.strftime(start_date, date_format) - if end_date: - data['to'] = datetime.strftime(end_date, date_format) - - if grouping: - data['grouping'] = grouping + data = self.__format(start_date, end_date) url = self.base_url + '/minutes' return self.get(url, data=data) + def vod(self, start_date=None, end_date=None, grouping=None): + """ Gets a report of VOD Usage """ + data = self.__format(start_date, end_date, grouping) + + url = self.base_url + '/vod' + return self.get(url, data=data) + + def live(self, start_date=None, end_date=None, grouping=None): + """ Gets a report of Live Usage """ + data = self.__format(start_date, end_date, grouping) + + url = self.base_url + '/live' + return self.get(url, data=data) + + def all(self, start_date=None, end_date=None, grouping=None): + """ Gets a report of both VOD and Live Usage """ + data = self.__format(start_date, end_date, grouping) + + url = self.base_url + '/all' + return self.get(url, data=data) +