Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-analytics-data-api-client
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
OpenEdx
edx-analytics-data-api-client
Commits
c14f3047
Commit
c14f3047
authored
Jul 15, 2014
by
Clinton Blackburn
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #8 from edx/exceptions
Added additional exception classes
parents
fb9e563d
8025087c
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
53 additions
and
6 deletions
+53
-6
analyticsclient/client.py
+16
-5
analyticsclient/exceptions.py
+12
-1
analyticsclient/tests/test_course.py
+25
-0
No files found.
analyticsclient/client.py
View file @
c14f3047
...
...
@@ -4,7 +4,7 @@ import requests
import
requests.exceptions
from
analyticsclient.course
import
Course
from
analyticsclient.exceptions
import
ClientError
from
analyticsclient.exceptions
import
ClientError
,
InvalidRequestError
,
NotFoundError
from
analyticsclient.status
import
Status
...
...
@@ -92,12 +92,23 @@ class Client(object):
headers
[
'Authorization'
]
=
'Token '
+
self
.
auth_token
try
:
response
=
requests
.
get
(
'{0}/{1}'
.
format
(
self
.
base_url
,
resource
),
headers
=
headers
,
timeout
=
timeout
)
uri
=
'{0}/{1}'
.
format
(
self
.
base_url
,
resource
)
response
=
requests
.
get
(
uri
,
headers
=
headers
,
timeout
=
timeout
)
status
=
response
.
status_code
if
status
!=
requests
.
codes
.
ok
:
# pylint: disable=no-member
message
=
'Resource "{0}" returned status code {1}'
.
format
(
resource
,
status
)
error_class
=
ClientError
if
status
==
requests
.
codes
.
bad_request
:
# pylint: disable=no-member
message
=
'The request to {0} was invalid.'
.
format
(
uri
)
error_class
=
InvalidRequestError
elif
status
==
requests
.
codes
.
not_found
:
# pylint: disable=no-member
message
=
'Resource {0} was not found on the API server.'
.
format
(
uri
)
error_class
=
NotFoundError
if
response
.
status_code
!=
requests
.
codes
.
ok
:
# pylint: disable=no-member
message
=
'Resource "{0}" returned status code {1}'
.
format
(
resource
,
response
.
status_code
)
log
.
error
(
message
)
raise
ClientError
(
message
)
raise
error_class
(
message
)
return
response
...
...
analyticsclient/exceptions.py
View file @
c14f3047
class
ClientError
(
Exception
):
""" Common base class for all client errors. """
pass
class
NotFoundError
(
ClientError
):
""" URL was not found. """
pass
class
InvalidRequestError
(
ClientError
):
""" The API request was invalid. """
pass
analyticsclient/tests/test_course.py
View file @
c14f3047
import
json
import
httpretty
import
re
from
analyticsclient
import
activity_type
as
at
from
analyticsclient
import
demographic
as
demo
from
analyticsclient.exceptions
import
NotFoundError
,
InvalidRequestError
from
analyticsclient.tests
import
ClientTestCase
...
...
@@ -25,6 +27,7 @@ class CoursesTests(ClientTestCase):
httpretty
.
register_uri
(
httpretty
.
GET
,
uri
,
body
=
json
.
dumps
(
data
))
self
.
assertDictEqual
(
data
,
course
.
enrollment
(
demographic
))
@httpretty.activate
def
assertRecentActivityResponseData
(
self
,
course
,
activity_type
):
body
=
{
u'course_id'
:
unicode
(
course
.
course_id
),
...
...
@@ -79,3 +82,25 @@ class CoursesTests(ClientTestCase):
self
.
assertRecentActivityResponseData
(
self
.
course
,
at
.
ATTEMPTED_PROBLEM
)
self
.
assertRecentActivityResponseData
(
self
.
course
,
at
.
PLAYED_VIDEO
)
self
.
assertRecentActivityResponseData
(
self
.
course
,
at
.
POSTED_FORUM
)
def
test_not_found
(
self
):
""" Course calls should raise a NotFoundError when provided with an invalid course. """
course_id
=
'not-a-course-id'
uri
=
self
.
get_api_url
(
'courses/{0}/'
.
format
(
course_id
))
uri
=
re
.
compile
(
r'^'
+
re
.
escape
(
uri
)
+
r'.*$'
)
httpretty
.
register_uri
(
httpretty
.
GET
,
uri
,
status
=
404
)
course
=
self
.
client
.
courses
(
course_id
)
self
.
assertRaises
(
NotFoundError
,
course
.
recent_activity
,
at
.
ANY
)
self
.
assertRaises
(
NotFoundError
,
course
.
enrollment
,
demo
.
EDUCATION
)
def
test_invalid_parameter
(
self
):
""" Course calls should raise a InvalidRequestError when parameters are invalid. """
uri
=
self
.
get_api_url
(
'courses/{0}/'
.
format
(
self
.
course_id
))
uri
=
re
.
compile
(
r'^'
+
re
.
escape
(
uri
)
+
r'.*$'
)
httpretty
.
register_uri
(
httpretty
.
GET
,
uri
,
status
=
400
)
self
.
assertRaises
(
InvalidRequestError
,
self
.
course
.
recent_activity
,
'not-a-an-activity-type'
)
self
.
assertRaises
(
InvalidRequestError
,
self
.
course
.
enrollment
,
'not-a-demographic'
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment