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
650582eb
Commit
650582eb
authored
Jun 13, 2014
by
Zia Fazal
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
put post in list view and remove detail view
parent
d6c303d1
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
31 additions
and
49 deletions
+31
-49
lms/djangoapps/api_manager/courses/tests.py
+17
-20
lms/djangoapps/api_manager/courses/urls.py
+0
-2
lms/djangoapps/api_manager/courses/views.py
+14
-27
No files found.
lms/djangoapps/api_manager/courses/tests.py
View file @
650582eb
...
...
@@ -1133,7 +1133,7 @@ class CoursesApiTests(TestCase):
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
def
test_coursemodulecompletions_
detail_delete
(
self
):
def
test_coursemodulecompletions_
post
(
self
):
data
=
{
'email'
:
'test@example.com'
,
...
...
@@ -1145,9 +1145,9 @@ class CoursesApiTests(TestCase):
response
=
self
.
do_post
(
self
.
base_users_uri
,
data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
created_user_id
=
response
.
data
[
'id'
]
detail_uri
=
'{}/{}/completions/{}/{}'
.
format
(
self
.
base_courses_uri
,
self
.
course
.
id
,
self
.
course_content
.
id
,
created_user_id
)
response
=
self
.
do_post
(
detail_uri
,
{}
)
completions_uri
=
'{}/{}/completions/'
.
format
(
self
.
base_courses_uri
,
self
.
course
.
id
)
completions_data
=
{
'content_id'
:
self
.
course_content
.
id
,
'user_id'
:
created_user_id
}
response
=
self
.
do_post
(
completions_uri
,
completions_data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
coursemodulecomp_id
=
response
.
data
[
'id'
]
self
.
assertGreater
(
coursemodulecomp_id
,
0
)
...
...
@@ -1158,23 +1158,18 @@ class CoursesApiTests(TestCase):
self
.
assertIsNotNone
(
response
.
data
[
'modified'
])
# test to create course completion with same attributes
response
=
self
.
do_post
(
detail_uri
,
{}
)
response
=
self
.
do_post
(
completions_uri
,
completions_data
)
self
.
assertEqual
(
response
.
status_code
,
409
)
# test for delete
response
=
self
.
do_delete
(
detail_uri
)
self
.
assertEqual
(
response
.
status_code
,
204
)
response
=
self
.
do_get
(
'{}/{}/completions?user_id={}&content_id={}'
.
format
(
self
.
base_courses_uri
,
self
.
course
.
id
,
created_user_id
,
self
.
course_content
.
id
))
self
.
assertEqual
(
response
.
status_code
,
404
)
# test to create course completion with empty user_id
completions_data
[
'user_id'
]
=
None
response
=
self
.
do_post
(
completions_uri
,
completions_data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
#test deletion of non existing course module completion
non_existing_uri
=
'{}/{}/completions/{}/{}'
.
format
(
self
.
base_courses_uri
,
self
.
course
.
id
,
self
.
course_content
.
id
,
'3323432'
)
response
=
self
.
do_delete
(
non_existing_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
# test to create course completion with empty content_id
completions_data
[
'content_id'
]
=
None
response
=
self
.
do_post
(
completions_uri
,
completions_data
)
self
.
assertEqual
(
response
.
status_code
,
400
)
def
test_coursemodulecompletions_filters
(
self
):
completion_uri
=
'{}/{}/completions/'
.
format
(
self
.
base_courses_uri
,
self
.
course
.
id
)
...
...
@@ -1192,7 +1187,8 @@ class CoursesApiTests(TestCase):
for
i
in
xrange
(
1
,
26
):
content_id
=
self
.
course_content
.
id
+
str
(
i
)
response
=
self
.
do_post
(
'{}{}/{}'
.
format
(
completion_uri
,
content_id
,
created_user_id
),
{})
completions_data
=
{
'content_id'
:
content_id
,
'user_id'
:
created_user_id
}
response
=
self
.
do_post
(
completion_uri
,
completions_data
)
self
.
assertEqual
(
response
.
status_code
,
201
)
#filter course module completion by user
...
...
@@ -1214,7 +1210,8 @@ class CoursesApiTests(TestCase):
#filter course module completion by user who has not completed any course module
user_filter_uri
=
'{}?user_id={}'
.
format
(
completion_uri
,
1
)
response
=
self
.
do_get
(
user_filter_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
[
'results'
]),
0
)
#filter course module completion by course_id
course_filter_uri
=
'{}?course_id={}&page_size=10'
.
format
(
completion_uri
,
self
.
course
.
id
)
...
...
lms/djangoapps/api_manager/courses/urls.py
View file @
650582eb
...
...
@@ -27,8 +27,6 @@ urlpatterns = patterns(
url
(
r'^(?P<course_id>[^/]+/[^/]+/[^/]+)/users/(?P<user_id>[0-9]+)$'
,
courses_views
.
CoursesUsersDetail
.
as_view
()),
url
(
r'^(?P<course_id>[^/]+/[^/]+/[^/]+)/users/*$'
,
courses_views
.
CoursesUsersList
.
as_view
()),
url
(
r'^(?P<course_id>[^/]+/[^/]+/[^/]+)/completions/*$'
,
courses_views
.
CourseModuleCompletionList
.
as_view
(),
name
=
'completion-list'
),
url
(
r'^(?P<course_id>[^/]+/[^/]+/[^/]+)/completions/(?P<content_id>[a-zA-Z0-9/_:]+)/(?P<user_id>[0-9]+)$'
,
courses_views
.
CourseModuleCompletionDetail
.
as_view
(),
name
=
'completion-detail'
),
)
urlpatterns
=
format_suffix_patterns
(
urlpatterns
)
lms/djangoapps/api_manager/courses/views.py
View file @
650582eb
...
...
@@ -1090,6 +1090,12 @@ class CourseModuleCompletionList(SecureListAPIView):
```/api/courses/{course_id}/completions/?user_id={user_id}```
```/api/courses/{course_id}/completions/?content_id={content_id}```
```/api/courses/{course_id}/completions/?user_id={user_id}&content_id={content_id}```
- POST: Creates a Course-Module completion entity
- POST Example:
{
"content_id":"i4x://the/content/location",
"user_id":4
}
### Use Cases/Notes:
* Use GET operation to retrieve list of course completions by user
* Use GET operation to verify user has completed specific course module
...
...
@@ -1113,26 +1119,19 @@ class CourseModuleCompletionList(SecureListAPIView):
if
content_id
:
queryset
=
queryset
.
filter
(
content_id
=
content_id
)
if
not
queryset
.
exists
()
and
(
user_ids
or
content_id
):
raise
Http404
return
queryset
class
CourseModuleCompletionDetail
(
SecureAPIView
):
def
post
(
self
,
request
,
course_id
):
"""
### The CourseModuleCompletionDetail view allows clients to interact with a
specific Course-Content completion entity
- URI: ```/api/courses/{course_id}/completions/{content_id}/{user_id}```
- POST: Creates a Course-Module completion entity
- DELETE: Removes an existing Course-Module completion entity from the system
### Use Cases/Notes:
* Use this operation to save or remove Course-Module completion entity
POST /api/courses/{course_id}/completions/
"""
content_id
=
request
.
DATA
.
get
(
'content_id'
,
None
)
user_id
=
request
.
DATA
.
get
(
'user_id'
,
None
)
if
not
content_id
:
return
Response
({
'message'
:
_
(
'content_id is missing'
)},
status
.
HTTP_400_BAD_REQUEST
)
if
not
user_id
:
return
Response
({
'message'
:
_
(
'user_id is missing'
)},
status
.
HTTP_400_BAD_REQUEST
)
def
post
(
self
,
request
,
course_id
,
content_id
,
user_id
):
"""
POST /api/courses/{course_id}/completions/{content_id}/{user_id}
"""
completion
,
created
=
CourseModuleCompletion
.
objects
.
get_or_create
(
user_id
=
user_id
,
course_id
=
course_id
,
content_id
=
content_id
)
...
...
@@ -1141,15 +1140,3 @@ class CourseModuleCompletionDetail(SecureAPIView):
return
Response
(
serializer
.
data
,
status
=
status
.
HTTP_201_CREATED
)
# pylint: disable=E1101
else
:
return
Response
({
'message'
:
_
(
'Resource already exists'
)},
status
=
status
.
HTTP_409_CONFLICT
)
def
delete
(
self
,
request
,
course_id
,
content_id
,
user_id
):
"""
DELETE /api/courses/{course_id}/completions/{content_id}/{user_id}
"""
try
:
completion
=
CourseModuleCompletion
.
objects
.
get
(
user_id
=
user_id
,
course_id
=
course_id
,
content_id
=
content_id
)
completion
.
delete
()
except
ObjectDoesNotExist
:
raise
Http404
response_data
=
{
'uri'
:
_generate_base_uri
(
request
)}
return
Response
(
response_data
,
status
=
status
.
HTTP_204_NO_CONTENT
)
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