Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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
edx
edx-platform
Commits
0385a8b5
Commit
0385a8b5
authored
Feb 24, 2015
by
Clinton Blackburn
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed Course List Endpoint
Updated filter to ensure only course descriptors are returned.
parent
0b9e5719
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
10 deletions
+35
-10
lms/djangoapps/course_structure_api/v0/tests.py
+24
-1
lms/djangoapps/course_structure_api/v0/views.py
+11
-9
No files found.
lms/djangoapps/course_structure_api/v0/tests.py
View file @
0385a8b5
...
@@ -7,12 +7,17 @@ from datetime import datetime
...
@@ -7,12 +7,17 @@ from datetime import datetime
from
django.core.urlresolvers
import
reverse
from
django.core.urlresolvers
import
reverse
from
django.test.utils
import
override_settings
from
django.test.utils
import
override_settings
from
mock
import
patch
,
Mock
from
oauth2_provider.tests.factories
import
AccessTokenFactory
,
ClientFactory
from
oauth2_provider.tests.factories
import
AccessTokenFactory
,
ClientFactory
from
openedx.core.djangoapps.content.course_structures.models
import
CourseStructure
,
update_course_structure
from
opaque_keys.edx.locator
import
CourseLocator
from
xmodule.error_module
import
ErrorDescriptor
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.factories
import
CourseFactory
,
ItemFactory
from
xmodule.modulestore.tests.factories
import
CourseFactory
,
ItemFactory
from
xmodule.modulestore.xml
import
CourseLocationManager
from
xmodule.tests
import
get_test_system
from
courseware.tests.factories
import
GlobalStaffFactory
,
StaffFactory
from
courseware.tests.factories
import
GlobalStaffFactory
,
StaffFactory
from
openedx.core.djangoapps.content.course_structures.models
import
CourseStructure
,
update_course_structure
TEST_SERVER_HOST
=
'http://testserver'
TEST_SERVER_HOST
=
'http://testserver'
...
@@ -260,6 +265,24 @@ class CourseListTests(CourseViewTestsMixin, ModuleStoreTestCase):
...
@@ -260,6 +265,24 @@ class CourseListTests(CourseViewTestsMixin, ModuleStoreTestCase):
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertDictContainsSubset
({
'count'
:
0
,
u'results'
:
[]},
response
.
data
)
self
.
assertDictContainsSubset
({
'count'
:
0
,
u'results'
:
[]},
response
.
data
)
def
test_course_error
(
self
):
"""
Ensure the view still returns results even if get_courses() returns an ErrorDescriptor. The ErrorDescriptor
should be filtered out.
"""
error_descriptor
=
ErrorDescriptor
.
from_xml
(
'<course></course>'
,
get_test_system
(),
CourseLocationManager
(
CourseLocator
(
org
=
'org'
,
course
=
'course'
,
run
=
'run'
)),
None
)
descriptors
=
[
error_descriptor
,
self
.
empty_course
,
self
.
course
]
with
patch
(
'xmodule.modulestore.mixed.MixedModuleStore.get_courses'
,
Mock
(
return_value
=
descriptors
)):
self
.
test_get
()
class
CourseDetailTests
(
CourseDetailMixin
,
CourseViewTestsMixin
,
ModuleStoreTestCase
):
class
CourseDetailTests
(
CourseDetailMixin
,
CourseViewTestsMixin
,
ModuleStoreTestCase
):
view
=
'course_structure_api:v0:detail'
view
=
'course_structure_api:v0:detail'
...
...
lms/djangoapps/course_structure_api/v0/views.py
View file @
0385a8b5
...
@@ -12,12 +12,12 @@ from rest_framework.response import Response
...
@@ -12,12 +12,12 @@ from rest_framework.response import Response
from
xmodule.modulestore.django
import
modulestore
from
xmodule.modulestore.django
import
modulestore
from
opaque_keys.edx.keys
import
CourseKey
from
opaque_keys.edx.keys
import
CourseKey
from
course_structure_api.v0
import
serializers
from
courseware
import
courses
from
courseware.access
import
has_access
from
courseware.access
import
has_access
from
openedx.core.djangoapps.content.course_structures
import
models
from
openedx.core.djangoapps.content.course_structures
import
models
from
openedx.core.lib.api.permissions
import
IsAuthenticatedOrDebug
from
openedx.core.lib.api.permissions
import
IsAuthenticatedOrDebug
from
openedx.core.lib.api.serializers
import
PaginationSerializer
from
openedx.core.lib.api.serializers
import
PaginationSerializer
from
courseware
import
courses
from
course_structure_api.v0
import
serializers
from
student.roles
import
CourseInstructorRole
,
CourseStaffRole
from
student.roles
import
CourseInstructorRole
,
CourseStaffRole
...
@@ -115,22 +115,24 @@ class CourseList(CourseViewMixin, ListAPIView):
...
@@ -115,22 +115,24 @@ class CourseList(CourseViewMixin, ListAPIView):
def
get_queryset
(
self
):
def
get_queryset
(
self
):
course_ids
=
self
.
request
.
QUERY_PARAMS
.
get
(
'course_id'
,
None
)
course_ids
=
self
.
request
.
QUERY_PARAMS
.
get
(
'course_id'
,
None
)
course_descriptor
s
=
[]
result
s
=
[]
if
course_ids
:
if
course_ids
:
course_ids
=
course_ids
.
split
(
','
)
course_ids
=
course_ids
.
split
(
','
)
for
course_id
in
course_ids
:
for
course_id
in
course_ids
:
course_key
=
CourseKey
.
from_string
(
course_id
)
course_key
=
CourseKey
.
from_string
(
course_id
)
course_descriptor
=
courses
.
get_course
(
course_key
)
course_descriptor
=
courses
.
get_course
(
course_key
)
course_descriptor
s
.
append
(
course_descriptor
)
result
s
.
append
(
course_descriptor
)
else
:
else
:
course_descriptor
s
=
modulestore
()
.
get_courses
()
result
s
=
modulestore
()
.
get_courses
()
results
=
[
course
for
course
in
course_descriptors
if
self
.
user_can_access_course
(
self
.
request
.
user
,
course
)]
# Ensure only course descriptors are returned.
results
=
(
course
for
course
in
results
if
course
.
scope_ids
.
block_type
==
'course'
)
#
Sort the results in a predictable manner
.
#
Ensure only courses accessible by the user are returned
.
results
.
sort
(
key
=
attrgetter
(
'id'
))
results
=
(
course
for
course
in
results
if
self
.
user_can_access_course
(
self
.
request
.
user
,
course
))
return
results
# Sort the results in a predictable manner.
return
sorted
(
results
,
key
=
attrgetter
(
'id'
))
class
CourseDetail
(
CourseViewMixin
,
RetrieveAPIView
):
class
CourseDetail
(
CourseViewMixin
,
RetrieveAPIView
):
...
...
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