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
fadca096
Commit
fadca096
authored
May 19, 2014
by
Chris Dodge
Committed by
Jonathan Piacenti
Aug 20, 2015
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cdodge/add-user-preferences: add access to the UserPreference table via the API
fixes
parent
87f25d10
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
130 additions
and
0 deletions
+130
-0
lms/djangoapps/api_manager/users/tests.py
+69
-0
lms/djangoapps/api_manager/users/urls.py
+1
-0
lms/djangoapps/api_manager/users/views.py
+60
-0
No files found.
lms/djangoapps/api_manager/users/tests.py
View file @
fadca096
...
...
@@ -81,6 +81,16 @@ class UsersApiTests(TestCase):
response
=
self
.
client
.
delete
(
uri
,
headers
=
headers
)
return
response
def
_create_test_user
(
self
):
"""Helper method to create a new test user"""
test_uri
=
'/api/users'
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
data
=
{
'email'
:
self
.
test_email
,
'username'
:
local_username
,
'password'
:
self
.
test_password
,
'first_name'
:
self
.
test_first_name
,
'last_name'
:
self
.
test_last_name
}
response
=
self
.
do_post
(
test_uri
,
data
)
user_id
=
response
.
data
[
'id'
]
return
user_id
def
test_user_list_post
(
self
):
test_uri
=
'/api/users'
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
...
...
@@ -734,6 +744,65 @@ class UsersApiTests(TestCase):
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
def
test_get_user_preferences_user_not_found
(
self
):
test_uri
=
'/api/users/{}/preferences'
.
format
(
'999999'
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
404
)
def
test_get_user_preferences_default
(
self
):
# By default newly created users will have one initial preference settings:
# 'pref-lang' = 'en'
user_id
=
self
.
_create_test_user
()
test_uri
=
'/api/users/{}/preferences'
.
format
(
user_id
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
1
)
self
.
assertEqual
(
response
.
data
[
'pref-lang'
],
'en'
)
def
test_post_user_preferences_user_not_found
(
self
):
test_uri
=
'/api/users/{}/preferences'
.
format
(
'999999'
)
response
=
self
.
do_post
(
test_uri
,
{
"foo"
:
"bar"
})
self
.
assertEqual
(
response
.
status_code
,
404
)
def
test_post_user_preferences_bad_request
(
self
):
user_id
=
self
.
_create_test_user
()
test_uri
=
'/api/users/{}/preferences'
.
format
(
user_id
)
response
=
self
.
do_post
(
test_uri
,
{})
self
.
assertEqual
(
response
.
status_code
,
400
)
# also test with a non-simple key/value set of strings
response
=
self
.
do_post
(
test_uri
,
{
"an_array"
:
[
'1'
,
'2'
]})
self
.
assertEqual
(
response
.
status_code
,
400
)
response
=
self
.
do_post
(
test_uri
,
{
"an_int"
:
1
})
self
.
assertEqual
(
response
.
status_code
,
400
)
response
=
self
.
do_post
(
test_uri
,
{
"a_float"
:
1.00
})
self
.
assertEqual
(
response
.
status_code
,
400
)
response
=
self
.
do_post
(
test_uri
,
{
"a_boolean"
:
False
})
self
.
assertEqual
(
response
.
status_code
,
400
)
def
test_post_user_preferences
(
self
):
user_id
=
self
.
_create_test_user
()
test_uri
=
'/api/users/{}/preferences'
.
format
(
user_id
)
response
=
self
.
do_post
(
test_uri
,
{
"foo"
:
"bar"
})
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
2
)
self
.
assertEqual
(
response
.
data
[
'pref-lang'
],
'en'
)
self
.
assertEqual
(
response
.
data
[
'foo'
],
'bar'
)
def
test_update_user_preferences
(
self
):
user_id
=
self
.
_create_test_user
()
test_uri
=
'/api/users/{}/preferences'
.
format
(
user_id
)
response
=
self
.
do_post
(
test_uri
,
{
"foo"
:
"bar"
})
self
.
assertEqual
(
response
.
status_code
,
201
)
response
=
self
.
do_post
(
test_uri
,
{
"foo"
:
"updated"
})
self
.
assertEqual
(
response
.
status_code
,
200
)
response
=
self
.
do_get
(
test_uri
)
self
.
assertEqual
(
response
.
status_code
,
200
)
self
.
assertEqual
(
len
(
response
.
data
),
2
)
self
.
assertEqual
(
response
.
data
[
'pref-lang'
],
'en'
)
self
.
assertEqual
(
response
.
data
[
'foo'
],
'updated'
)
def
test_course_grades
(
self
):
test_uri
=
'/api/users'
local_username
=
self
.
test_username
+
str
(
randint
(
11
,
99
))
...
...
lms/djangoapps/api_manager/users/urls.py
View file @
fadca096
...
...
@@ -14,6 +14,7 @@ urlpatterns = patterns(
url
(
r'^(?P<user_id>[0-9]+)/courses/(?P<course_id>[^/]+/[^/]+/[^/]+)/grades$'
,
users_views
.
UsersCoursesGradesDetail
.
as_view
()),
url
(
r'^(?P<user_id>[0-9]+)/groups/*$'
,
users_views
.
UsersGroupsList
.
as_view
()),
url
(
r'^(?P<user_id>[0-9]+)/groups/(?P<group_id>[0-9]+)$'
,
users_views
.
UsersGroupsDetail
.
as_view
()),
url
(
r'^(?P<user_id>[0-9]+)/preferences$'
,
users_views
.
UsersPreferences
.
as_view
()),
)
urlpatterns
=
format_suffix_patterns
(
urlpatterns
)
lms/djangoapps/api_manager/users/views.py
View file @
fadca096
...
...
@@ -636,3 +636,63 @@ class UsersCoursesGradesDetail(SecureAPIView):
}
return
Response
(
response_data
)
class
UsersPreferences
(
SecureAPIView
):
""" Inherit with SecureAPIView """
def
get
(
self
,
request
,
user_id
):
# pylint: disable=W0613
"""
GET returns the preferences for the specified user
"""
response_data
=
{}
try
:
user
=
User
.
objects
.
get
(
id
=
user_id
)
except
ObjectDoesNotExist
:
return
Response
({},
status
.
HTTP_404_NOT_FOUND
)
for
preference
in
user
.
preferences
.
all
():
response_data
[
preference
.
key
]
=
preference
.
value
return
Response
(
response_data
)
def
post
(
self
,
request
,
user_id
):
"""
POST adds a new entry into the UserPreference table
"""
try
:
user
=
User
.
objects
.
get
(
id
=
user_id
)
except
ObjectDoesNotExist
:
return
Response
({},
status
.
HTTP_404_NOT_FOUND
)
if
not
len
(
request
.
DATA
):
return
Response
({},
status
.
HTTP_400_BAD_REQUEST
)
# do a quick inspection to make sure we're only getting strings as values
for
key
in
request
.
DATA
.
keys
():
value
=
request
.
DATA
[
key
]
if
not
isinstance
(
value
,
basestring
):
return
Response
({},
status
.
HTTP_400_BAD_REQUEST
)
status_code
=
status
.
HTTP_200_OK
for
key
in
request
.
DATA
.
keys
():
value
=
request
.
DATA
[
key
]
# see if the key already exists
found
=
None
for
preference
in
user
.
preferences
.
all
():
if
preference
.
key
==
key
:
found
=
preference
break
if
found
:
found
.
value
=
value
found
.
save
()
else
:
preference
=
UserPreference
.
objects
.
create
(
user_id
=
user_id
,
key
=
key
,
value
=
value
)
preference
.
save
()
status_code
=
status
.
HTTP_201_CREATED
return
Response
({},
status_code
)
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