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
ae102de3
Commit
ae102de3
authored
Jan 30, 2015
by
Muzaffar yousaf
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #6777 from edx/muzaffar/student-info-tnl836
Get user anonymous id via xblock user service.
parents
011a5f94
3a09af07
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
78 additions
and
3 deletions
+78
-3
cms/djangoapps/contentstore/tests/test_libraries.py
+3
-1
common/djangoapps/xblock_django/tests/test_user_service.py
+41
-0
common/djangoapps/xblock_django/user_service.py
+30
-0
lms/djangoapps/courseware/module_render.py
+4
-2
No files found.
cms/djangoapps/contentstore/tests/test_libraries.py
View file @
ae102de3
...
...
@@ -80,7 +80,9 @@ class LibraryTestCase(ModuleStoreTestCase):
of a LibraryContent block
"""
if
'user'
not
in
lib_content_block
.
runtime
.
_services
:
# pylint: disable=protected-access
lib_content_block
.
runtime
.
_services
[
'user'
]
=
Mock
(
user_id
=
self
.
user
.
id
)
# pylint: disable=protected-access
mocked_user_service
=
Mock
(
user_id
=
self
.
user
.
id
)
.
get_current_user
.
return_value
=
{}
lib_content_block
.
runtime
.
_services
[
'user'
]
=
mocked_user_service
# pylint: disable=protected-access
handler_url
=
reverse_usage_url
(
'component_handler'
,
lib_content_block
.
location
,
...
...
common/djangoapps/xblock_django/tests/test_user_service.py
View file @
ae102de3
...
...
@@ -7,8 +7,11 @@ from xblock_django.user_service import (
ATTR_KEY_IS_AUTHENTICATED
,
ATTR_KEY_USER_ID
,
ATTR_KEY_USERNAME
,
ATTR_KEY_USER_IS_STAFF
,
)
from
student.models
import
anonymous_id_for_user
from
student.tests.factories
import
UserFactory
,
AnonymousUserFactory
from
opaque_keys.edx.keys
import
CourseKey
class
UserServiceTestCase
(
TestCase
):
...
...
@@ -37,6 +40,7 @@ class UserServiceTestCase(TestCase):
self
.
assertEqual
(
xb_user
.
full_name
,
dj_user
.
profile
.
name
)
self
.
assertEqual
(
xb_user
.
opt_attrs
[
ATTR_KEY_USERNAME
],
dj_user
.
username
)
self
.
assertEqual
(
xb_user
.
opt_attrs
[
ATTR_KEY_USER_ID
],
dj_user
.
id
)
self
.
assertFalse
(
xb_user
.
opt_attrs
[
ATTR_KEY_USER_IS_STAFF
])
def
test_convert_anon_user
(
self
):
"""
...
...
@@ -55,3 +59,40 @@ class UserServiceTestCase(TestCase):
xb_user
=
django_user_service
.
get_current_user
()
self
.
assertTrue
(
xb_user
.
is_current_user
)
self
.
assert_xblock_user_matches_django
(
xb_user
,
self
.
user
)
def
test_get_anonymous_user_id_returns_none_for_non_staff_users
(
self
):
"""
Tests for anonymous_user_id method to return None if user is Non-Staff.
"""
django_user_service
=
DjangoXBlockUserService
(
self
.
user
,
user_is_staff
=
False
)
anonymous_user_id
=
django_user_service
.
get_anonymous_user_id
(
username
=
self
.
user
.
username
,
course_id
=
'edx/toy/2012_Fall'
)
self
.
assertIsNone
(
anonymous_user_id
)
def
test_get_anonymous_user_id_returns_none_for_non_existing_users
(
self
):
"""
Tests for anonymous_user_id method to return None username does not exist in system.
"""
django_user_service
=
DjangoXBlockUserService
(
self
.
user
,
user_is_staff
=
True
)
anonymous_user_id
=
django_user_service
.
get_anonymous_user_id
(
username
=
"No User"
,
course_id
=
'edx/toy/2012_Fall'
)
self
.
assertIsNone
(
anonymous_user_id
)
def
test_get_anonymous_user_id_returns_id_for_existing_users
(
self
):
"""
Tests for anonymous_user_id method returns anonymous user id for a user.
"""
course_key
=
CourseKey
.
from_string
(
'edX/toy/2012_Fall'
)
anon_user_id
=
anonymous_id_for_user
(
user
=
self
.
user
,
course_id
=
course_key
,
save
=
True
)
django_user_service
=
DjangoXBlockUserService
(
self
.
user
,
user_is_staff
=
True
)
anonymous_user_id
=
django_user_service
.
get_anonymous_user_id
(
username
=
self
.
user
.
username
,
course_id
=
'edX/toy/2012_Fall'
)
self
.
assertEqual
(
anonymous_user_id
,
anon_user_id
)
common/djangoapps/xblock_django/user_service.py
View file @
ae102de3
"""
Support for converting a django user to an XBlock user
"""
from
django.contrib.auth.models
import
User
from
opaque_keys.edx.keys
import
CourseKey
from
xblock.reference.user_service
import
XBlockUser
,
UserService
from
student.models
import
anonymous_id_for_user
,
get_user_by_username_or_email
ATTR_KEY_IS_AUTHENTICATED
=
'edx-platform.is_authenticated'
ATTR_KEY_USER_ID
=
'edx-platform.user_id'
ATTR_KEY_USERNAME
=
'edx-platform.username'
ATTR_KEY_USER_IS_STAFF
=
'edx-platform.user_is_staff'
class
DjangoXBlockUserService
(
UserService
):
...
...
@@ -15,6 +19,8 @@ class DjangoXBlockUserService(UserService):
def
__init__
(
self
,
django_user
,
**
kwargs
):
super
(
DjangoXBlockUserService
,
self
)
.
__init__
(
**
kwargs
)
self
.
_django_user
=
django_user
if
self
.
_django_user
:
self
.
_django_user
.
user_is_staff
=
kwargs
.
get
(
'user_is_staff'
,
False
)
def
get_current_user
(
self
):
"""
...
...
@@ -22,6 +28,29 @@ class DjangoXBlockUserService(UserService):
"""
return
self
.
_convert_django_user_to_xblock_user
(
self
.
_django_user
)
def
get_anonymous_user_id
(
self
,
username
,
course_id
):
"""
Get the anonymous user id for a user.
Args:
username(str): username of a user.
course_id(str): course id of particular course.
Returns:
A unique anonymous_user_id for (user, course) pair.
None for Non-staff users.
"""
if
not
self
.
get_current_user
()
.
opt_attrs
.
get
(
ATTR_KEY_USER_IS_STAFF
):
return
None
try
:
user
=
get_user_by_username_or_email
(
username_or_email
=
username
)
except
User
.
DoesNotExist
:
return
None
course_id
=
CourseKey
.
from_string
(
course_id
)
return
anonymous_id_for_user
(
user
=
user
,
course_id
=
course_id
,
save
=
False
)
def
_convert_django_user_to_xblock_user
(
self
,
django_user
):
"""
A function that returns an XBlockUser from the current Django request.user
...
...
@@ -36,6 +65,7 @@ class DjangoXBlockUserService(UserService):
xblock_user
.
opt_attrs
[
ATTR_KEY_IS_AUTHENTICATED
]
=
True
xblock_user
.
opt_attrs
[
ATTR_KEY_USER_ID
]
=
django_user
.
id
xblock_user
.
opt_attrs
[
ATTR_KEY_USERNAME
]
=
django_user
.
username
xblock_user
.
opt_attrs
[
ATTR_KEY_USER_IS_STAFF
]
=
django_user
.
user_is_staff
else
:
xblock_user
.
opt_attrs
[
ATTR_KEY_IS_AUTHENTICATED
]
=
False
...
...
lms/djangoapps/courseware/module_render.py
View file @
ae102de3
...
...
@@ -591,6 +591,8 @@ def get_module_system_for_user(user, field_data_cache,
field_data
=
LmsFieldData
(
descriptor
.
_field_data
,
student_data
)
# pylint: disable=protected-access
user_is_staff
=
has_access
(
user
,
u'staff'
,
descriptor
.
location
,
course_id
)
system
=
LmsModuleSystem
(
track_function
=
track_function
,
render_template
=
render_to_string
,
...
...
@@ -637,7 +639,7 @@ def get_module_system_for_user(user, field_data_cache,
'i18n'
:
ModuleI18nService
(),
'fs'
:
xblock
.
reference
.
plugins
.
FSService
(),
'field-data'
:
field_data
,
'user'
:
DjangoXBlockUserService
(
user
),
'user'
:
DjangoXBlockUserService
(
user
,
user_is_staff
=
user_is_staff
),
},
get_user_role
=
lambda
:
get_user_role
(
user
,
course_id
),
descriptor_runtime
=
descriptor
.
runtime
,
...
...
@@ -661,7 +663,7 @@ def get_module_system_for_user(user, field_data_cache,
make_psychometrics_data_update_handler
(
course_id
,
user
,
descriptor
.
location
)
)
system
.
set
(
u'user_is_staff'
,
has_access
(
user
,
u'staff'
,
descriptor
.
location
,
course_id
)
)
system
.
set
(
u'user_is_staff'
,
user_is_staff
)
system
.
set
(
u'user_is_admin'
,
has_access
(
user
,
u'staff'
,
'global'
))
# make an ErrorDescriptor -- assuming that the descriptor's system is ok
...
...
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