Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
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
course-discovery
Commits
3d599189
Commit
3d599189
authored
Jul 12, 2016
by
Marko Jevtic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SOL-1934] Optimize course catalog course_runs/contains endpoint
parent
f575170b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
25 additions
and
6 deletions
+25
-6
course_discovery/apps/api/v1/tests/test_views/test_course_runs.py
+22
-1
course_discovery/apps/api/v1/views.py
+3
-5
No files found.
course_discovery/apps/api/v1/tests/test_views/test_course_runs.py
View file @
3d599189
...
@@ -20,6 +20,7 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
...
@@ -20,6 +20,7 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
self
.
user
=
UserFactory
(
is_staff
=
True
,
is_superuser
=
True
)
self
.
user
=
UserFactory
(
is_staff
=
True
,
is_superuser
=
True
)
self
.
client
.
force_authenticate
(
self
.
user
)
self
.
client
.
force_authenticate
(
self
.
user
)
self
.
course_run
=
CourseRunFactory
()
self
.
course_run
=
CourseRunFactory
()
self
.
course_run_2
=
CourseRunFactory
()
self
.
refresh_index
()
self
.
refresh_index
()
self
.
request
=
APIRequestFactory
()
.
get
(
'/'
)
self
.
request
=
APIRequestFactory
()
.
get
(
'/'
)
self
.
request
.
user
=
self
.
user
self
.
request
.
user
=
self
.
user
...
@@ -67,7 +68,7 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
...
@@ -67,7 +68,7 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
)
)
self
.
assertListEqual
(
actual_sorted
,
expected_sorted
)
self
.
assertListEqual
(
actual_sorted
,
expected_sorted
)
def
test_contains
(
self
):
def
test_contains
_single_course_run
(
self
):
qs
=
urllib
.
parse
.
urlencode
({
qs
=
urllib
.
parse
.
urlencode
({
'query'
:
'id:course*'
,
'query'
:
'id:course*'
,
'course_run_ids'
:
self
.
course_run
.
key
'course_run_ids'
:
self
.
course_run
.
key
...
@@ -85,6 +86,26 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
...
@@ -85,6 +86,26 @@ class CourseRunViewSetTests(ElasticsearchTestMixin, APITestCase):
}
}
)
)
def
test_contains_multiple_course_runs
(
self
):
qs
=
urllib
.
parse
.
urlencode
({
'query'
:
'id:course*'
,
'course_run_ids'
:
'{},{},{}'
.
format
(
self
.
course_run
.
key
,
self
.
course_run_2
.
key
,
'abc'
)
})
url
=
'{}?{}'
.
format
(
reverse
(
'api:v1:course_run-contains'
),
qs
)
response
=
self
.
client
.
get
(
url
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertDictEqual
(
response
.
data
,
{
'course_runs'
:
{
self
.
course_run
.
key
:
True
,
self
.
course_run_2
.
key
:
True
,
'abc'
:
False
}
}
)
@ddt.data
(
@ddt.data
(
{
'params'
:
{
'course_run_ids'
:
'a/b/c'
}},
{
'params'
:
{
'course_run_ids'
:
'a/b/c'
}},
{
'params'
:
{
'query'
:
'id:course*'
}},
{
'params'
:
{
'query'
:
'id:course*'
}},
...
...
course_discovery/apps/api/v1/views.py
View file @
3d599189
...
@@ -265,11 +265,9 @@ class CourseRunViewSet(viewsets.ReadOnlyModelViewSet):
...
@@ -265,11 +265,9 @@ class CourseRunViewSet(viewsets.ReadOnlyModelViewSet):
course_run_ids
=
request
.
GET
.
get
(
'course_run_ids'
)
course_run_ids
=
request
.
GET
.
get
(
'course_run_ids'
)
if
query
and
course_run_ids
:
if
query
and
course_run_ids
:
course_runs
=
CourseRun
.
search
(
query
)
course_run_ids
=
course_run_ids
.
split
(
','
)
contains
=
{
course_run_id
:
False
for
course_run_id
in
course_run_ids
.
split
(
','
)}
course_runs
=
CourseRun
.
search
(
query
)
.
filter
(
key__in
=
course_run_ids
)
.
values_list
(
'key'
,
flat
=
True
)
contains
=
{
course_run_id
:
course_run_id
in
course_runs
for
course_run_id
in
course_run_ids
}
for
course_run
in
course_runs
:
contains
[
course_run
.
key
]
=
True
instance
=
{
'course_runs'
:
contains
}
instance
=
{
'course_runs'
:
contains
}
serializer
=
serializers
.
ContainedCourseRunsSerializer
(
instance
)
serializer
=
serializers
.
ContainedCourseRunsSerializer
(
instance
)
...
...
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