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
4d729100
Commit
4d729100
authored
Dec 01, 2014
by
muzaffaryousaf
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Adding get_anonymous_user_id in Xblock 'user' service.
TNL-836
parent
175aeaf4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
90 additions
and
2 deletions
+90
-2
common/djangoapps/xblock_django/tests/test_user_service.py
+38
-0
common/djangoapps/xblock_django/user_service.py
+28
-0
lms/djangoapps/courseware/module_render.py
+4
-2
lms/djangoapps/courseware/tests/test_module_render.py
+20
-0
No files found.
common/djangoapps/xblock_django/tests/test_user_service.py
View file @
4d729100
...
...
@@ -8,7 +8,9 @@ from xblock_django.user_service import (
ATTR_KEY_USER_ID
,
ATTR_KEY_USERNAME
,
)
from
student.models
import
anonymous_id_for_user
from
student.tests.factories
import
UserFactory
,
AnonymousUserFactory
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
class
UserServiceTestCase
(
TestCase
):
...
...
@@ -55,3 +57,39 @@ 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.
"""
anon_user_id
=
anonymous_id_for_user
(
user
=
self
.
user
,
course_id
=
SlashSeparatedCourseKey
(
'edX'
,
'toy'
,
'2012_Fall'
),
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 @
4d729100
"""
Support for converting a django user to an XBlock user
"""
from
django.contrib.auth.models
import
User
from
xblock.reference.user_service
import
XBlockUser
,
UserService
from
student.models
import
anonymous_id_for_user
,
get_user_by_username_or_email
from
opaque_keys.edx.locations
import
SlashSeparatedCourseKey
ATTR_KEY_IS_AUTHENTICATED
=
'edx-platform.is_authenticated'
ATTR_KEY_USER_ID
=
'edx-platform.user_id'
...
...
@@ -15,6 +19,7 @@ class DjangoXBlockUserService(UserService):
def
__init__
(
self
,
django_user
,
**
kwargs
):
super
(
DjangoXBlockUserService
,
self
)
.
__init__
(
**
kwargs
)
self
.
_django_user
=
django_user
self
.
_user_is_staff
=
kwargs
.
get
(
'user_is_staff'
,
False
)
def
get_current_user
(
self
):
"""
...
...
@@ -22,6 +27,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
.
_user_is_staff
:
return
None
try
:
user
=
get_user_by_username_or_email
(
username_or_email
=
username
)
except
User
.
DoesNotExist
:
return
None
course_id
=
SlashSeparatedCourseKey
.
from_deprecated_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
...
...
lms/djangoapps/courseware/module_render.py
View file @
4d729100
...
...
@@ -598,6 +598,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
,
...
...
@@ -644,7 +646,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
,
...
...
@@ -668,7 +670,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
...
...
lms/djangoapps/courseware/tests/test_module_render.py
View file @
4d729100
...
...
@@ -1218,3 +1218,23 @@ class LMSXBlockServiceBindingTest(ModuleStoreTestCase):
)
service
=
runtime
.
service
(
descriptor
,
expected_service
)
self
.
assertIsNotNone
(
service
)
@XBlock.register_temp_plugin
(
PureXBlock
,
identifier
=
'pure'
)
@ddt.data
(
"user"
)
def
test_expected_user_service_exists_with_staff_info
(
self
,
expected_service
):
"""
Tests that the LMS runtime contains the 'user' service with appropriate staff info.
"""
descriptor
=
ItemFactory
(
category
=
"pure"
,
parent
=
self
.
course
)
runtime
,
_
=
render
.
get_module_system_for_user
(
self
.
user
,
self
.
field_data_cache
,
descriptor
,
self
.
course
.
id
,
self
.
track_function
,
self
.
xqueue_callback_url_prefix
,
self
.
request_token
)
service
=
runtime
.
service
(
descriptor
,
expected_service
)
self
.
assertIsNotNone
(
service
)
self
.
assertTrue
(
hasattr
(
service
,
'_user_is_staff'
))
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