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
509ae29d
Commit
509ae29d
authored
Dec 07, 2016
by
Dennis Jen
Committed by
GitHub
Dec 07, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Added course summaries endpoint. (#29)
* Added course summaries endpoint.
parent
fb3e1d47
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
119 additions
and
1 deletions
+119
-1
analyticsclient/client.py
+2
-0
analyticsclient/course_summaries.py
+38
-0
analyticsclient/tests/test_course_summaries.py
+77
-0
requirements.txt
+1
-0
setup.py
+1
-1
No files found.
analyticsclient/client.py
View file @
509ae29d
...
...
@@ -5,6 +5,7 @@ import requests.exceptions
from
analyticsclient.constants
import
data_format
as
DF
from
analyticsclient.course
import
Course
from
analyticsclient.course_summaries
import
CourseSummaries
from
analyticsclient.exceptions
import
ClientError
,
InvalidRequestError
,
NotFoundError
,
TimeoutError
from
analyticsclient.module
import
Module
from
analyticsclient.status
import
Status
...
...
@@ -40,6 +41,7 @@ class Client(object):
self
.
timeout
=
timeout
self
.
status
=
Status
(
self
)
self
.
course_summaries
=
lambda
:
CourseSummaries
(
self
)
self
.
courses
=
lambda
course_id
:
Course
(
self
,
course_id
)
self
.
modules
=
lambda
course_id
,
module_id
:
Module
(
self
,
course_id
,
module_id
)
...
...
analyticsclient/course_summaries.py
0 → 100644
View file @
509ae29d
import
urllib
import
analyticsclient.constants.data_format
as
DF
class
CourseSummaries
(
object
):
"""Course summaries."""
def
__init__
(
self
,
client
):
"""
Initialize the CourseSummaries client.
Arguments:
client (analyticsclient.client.Client): The client to use to access remote resources.
"""
self
.
client
=
client
def
course_summaries
(
self
,
course_ids
=
None
,
fields
=
None
,
data_format
=
DF
.
JSON
):
"""
Get list of summaries.
Arguments:
course_ids: Array of course IDs as strings to return. Default is to return all.
fields: Array of fields to return. Default is to return all.
"""
query_params
=
{}
for
query_arg
,
data
in
zip
([
'course_ids'
,
'fields'
],
[
course_ids
,
fields
]):
if
data
:
query_params
[
query_arg
]
=
','
.
join
(
data
)
path
=
'course_summaries/'
querystring
=
urllib
.
urlencode
(
query_params
)
if
querystring
:
path
+=
'?{0}'
.
format
(
querystring
)
return
self
.
client
.
get
(
path
,
data_format
=
data_format
)
analyticsclient/tests/test_course_summaries.py
0 → 100644
View file @
509ae29d
import
ddt
import
httpretty
from
analyticsclient.tests
import
ClientTestCase
@ddt.ddt
class
CourseSummariesTests
(
ClientTestCase
):
def
setUp
(
self
):
super
(
CourseSummariesTests
,
self
)
.
setUp
()
self
.
base_uri
=
self
.
get_api_url
(
'course_summaries/'
)
self
.
course_summaries_client
=
self
.
client
.
course_summaries
()
httpretty
.
enable
()
def
verify_last_querystring_equal
(
self
,
expected_query
):
"""
Convenience method for asserting the last request was made with the
expected query parameters.
"""
self
.
assertDictEqual
(
httpretty
.
last_request
()
.
querystring
,
expected_query
)
def
expected_query
(
self
,
course_ids
=
None
,
fields
=
None
):
"""Packs the query arguments into expected format for http pretty."""
query
=
{}
for
field
,
data
in
zip
([
'course_ids'
,
'fields'
],
[
course_ids
,
fields
]):
if
data
is
not
None
:
query
[
field
]
=
[
','
.
join
(
data
)]
return
query
@httpretty.activate
def
test_all_summaries_url
(
self
):
"""Course summaries can be called without parameters."""
httpretty
.
register_uri
(
httpretty
.
GET
,
self
.
base_uri
,
body
=
'{}'
)
self
.
course_summaries_client
.
course_summaries
()
@httpretty.activate
@ddt.data
(
[
'edx/demo/course'
],
[
'edx/demo/course'
,
'another/demo/course'
]
)
def
test_courses_ids
(
self
,
course_ids
):
"""Course summaries can be called with course IDs"""
uri_template
=
'{uri}?course_ids={ids}'
uri
=
uri_template
.
format
(
uri
=
self
.
base_uri
,
ids
=
course_ids
)
httpretty
.
register_uri
(
httpretty
.
GET
,
uri
,
body
=
'{}'
)
self
.
course_summaries_client
.
course_summaries
(
course_ids
=
course_ids
)
self
.
verify_last_querystring_equal
(
self
.
expected_query
(
course_ids
=
course_ids
))
@httpretty.activate
@ddt.data
(
[
'course_id'
],
[
'course_id'
,
'enrollment_modes'
]
)
def
test_fields
(
self
,
fields
):
"""Course summaries can be called with fields."""
uri_template
=
'{uri}?fields={fields}'
uri
=
uri_template
.
format
(
uri
=
self
.
base_uri
,
fields
=
fields
[
0
])
httpretty
.
register_uri
(
httpretty
.
GET
,
uri
,
body
=
'{}'
)
self
.
course_summaries_client
.
course_summaries
(
fields
=
fields
)
self
.
verify_last_querystring_equal
(
self
.
expected_query
(
fields
=
fields
))
@httpretty.activate
@ddt.data
(
([
'edx/demo/course'
],
[
'course_id'
]),
([
'edx/demo/course'
,
'another/demo/course'
],
[
'course_id'
,
'enrollment_modes'
])
)
@ddt.unpack
def
test_all_parameters
(
self
,
course_ids
,
fields
):
"""Course summaries can be called with both fields and course IDs."""
httpretty
.
reset
()
uri_template
=
'{uri}?course_ids={ids}fields={fields}'
uri
=
uri_template
.
format
(
uri
=
self
.
base_uri
,
ids
=
course_ids
,
fields
=
fields
)
httpretty
.
register_uri
(
httpretty
.
GET
,
uri
,
body
=
'{}'
)
self
.
course_summaries_client
.
course_summaries
(
course_ids
=
course_ids
,
fields
=
fields
)
self
.
verify_last_querystring_equal
(
self
.
expected_query
(
course_ids
=
course_ids
,
fields
=
fields
))
requirements.txt
View file @
509ae29d
...
...
@@ -2,6 +2,7 @@ requests==2.2.0
# Testing
coverage
==3.7.1
ddt
==1.1.1
nose
==1.3.3
httpretty
==0.8.0
pep8
==1.7.0
...
...
setup.py
View file @
509ae29d
...
...
@@ -2,7 +2,7 @@ from distutils.core import setup
setup
(
name
=
'edx-analytics-data-api-client'
,
version
=
'0.
9
.0'
,
version
=
'0.
10
.0'
,
packages
=
[
'analyticsclient'
,
'analyticsclient.constants'
],
url
=
'https://github.com/edx/edx-analytics-data-api-client'
,
description
=
'Client used to access edX analytics data warehouse'
,
...
...
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