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
1ab52f8b
Commit
1ab52f8b
authored
Jul 21, 2016
by
Kevin Kim
Committed by
GitHub
Jul 21, 2016
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #12945 from edx/kkim/ora_tz_date
Convert ORA Due Dates
parents
67e15e22
94100f59
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
37 additions
and
9 deletions
+37
-9
cms/djangoapps/contentstore/tests/test_libraries.py
+4
-1
cms/djangoapps/contentstore/views/tests/test_item.py
+1
-0
common/djangoapps/xblock_django/tests/test_user_service.py
+12
-0
common/djangoapps/xblock_django/user_service.py
+10
-1
openedx/core/djangoapps/user_api/models.py
+4
-3
openedx/core/djangoapps/user_api/tests/test_models.py
+4
-0
openedx/core/lib/time_zone_utils.py
+2
-4
No files found.
cms/djangoapps/contentstore/tests/test_libraries.py
View file @
1ab52f8b
...
...
@@ -25,6 +25,7 @@ from openedx.core.djangoapps.content.course_structures.tests import SignalDiscon
from
xblock_django.user_service
import
DjangoXBlockUserService
from
xmodule.x_module
import
STUDIO_VIEW
from
student
import
auth
from
student.tests.factories
import
UserFactory
class
LibraryTestCase
(
ModuleStoreTestCase
):
...
...
@@ -34,6 +35,7 @@ class LibraryTestCase(ModuleStoreTestCase):
def
setUp
(
self
):
super
(
LibraryTestCase
,
self
)
.
setUp
()
self
.
user
=
UserFactory
(
password
=
self
.
user_password
,
is_staff
=
True
)
self
.
client
=
AjaxEnabledTestClient
()
self
.
_login_as_staff_user
(
logout_first
=
False
)
...
...
@@ -477,7 +479,8 @@ class TestLibraryAccess(SignalDisconnectTestMixin, LibraryTestCase):
def
setUp
(
self
):
""" Create a library, staff user, and non-staff user """
super
(
TestLibraryAccess
,
self
)
.
setUp
()
self
.
non_staff_user
,
self
.
non_staff_user_password
=
self
.
create_non_staff_user
()
self
.
non_staff_user_password
=
'foo'
self
.
non_staff_user
=
UserFactory
(
password
=
self
.
non_staff_user_password
,
is_staff
=
False
)
def
_login_as_non_staff_user
(
self
,
logout_first
=
True
):
""" Login as a user that starts out with no roles/permissions granted. """
...
...
cms/djangoapps/contentstore/views/tests/test_item.py
View file @
1ab52f8b
...
...
@@ -1217,6 +1217,7 @@ class TestEditSplitModule(ItemTest):
"""
def
setUp
(
self
):
super
(
TestEditSplitModule
,
self
)
.
setUp
()
self
.
user
=
UserFactory
()
self
.
course
.
user_partitions
=
[
UserPartition
(
0
,
'first_partition'
,
'First Partition'
,
...
...
common/djangoapps/xblock_django/tests/test_user_service.py
View file @
1ab52f8b
...
...
@@ -8,10 +8,13 @@ from xblock_django.user_service import (
ATTR_KEY_USER_ID
,
ATTR_KEY_USERNAME
,
ATTR_KEY_USER_IS_STAFF
,
ATTR_KEY_USER_PREFERENCES
,
USER_PREFERENCES_WHITE_LIST
,
)
from
student.models
import
anonymous_id_for_user
from
student.tests.factories
import
UserFactory
,
AnonymousUserFactory
from
opaque_keys.edx.keys
import
CourseKey
from
openedx.core.djangoapps.user_api.preferences.api
import
set_user_preference
class
UserServiceTestCase
(
TestCase
):
...
...
@@ -22,6 +25,9 @@ class UserServiceTestCase(TestCase):
super
(
UserServiceTestCase
,
self
)
.
setUp
()
self
.
user
=
UserFactory
(
username
=
"tester"
,
email
=
"test@tester.com"
)
self
.
user
.
profile
.
name
=
"Test Tester"
set_user_preference
(
self
.
user
,
'pref-lang'
,
'en'
)
set_user_preference
(
self
.
user
,
'time_zone'
,
'US/Pacific'
)
set_user_preference
(
self
.
user
,
'not_white_listed'
,
'hidden_value'
)
self
.
anon_user
=
AnonymousUserFactory
()
def
assert_is_anon_xb_user
(
self
,
xb_user
):
...
...
@@ -42,6 +48,12 @@ class UserServiceTestCase(TestCase):
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
])
self
.
assertTrue
(
all
(
pref
in
USER_PREFERENCES_WHITE_LIST
for
pref
in
xb_user
.
opt_attrs
[
ATTR_KEY_USER_PREFERENCES
]
)
)
def
test_convert_anon_user
(
self
):
"""
...
...
common/djangoapps/xblock_django/user_service.py
View file @
1ab52f8b
...
...
@@ -3,13 +3,16 @@ 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
openedx.core.djangoapps.user_api.preferences.api
import
get_user_preferences
from
student.models
import
anonymous_id_for_user
,
get_user_by_username_or_email
from
xblock.reference.user_service
import
XBlockUser
,
UserService
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'
ATTR_KEY_USER_PREFERENCES
=
'edx-platform.user_preferences'
USER_PREFERENCES_WHITE_LIST
=
[
'pref-lang'
,
'time_zone'
]
class
DjangoXBlockUserService
(
UserService
):
...
...
@@ -69,6 +72,12 @@ class DjangoXBlockUserService(UserService):
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
user_preferences
=
get_user_preferences
(
django_user
)
xblock_user
.
opt_attrs
[
ATTR_KEY_USER_PREFERENCES
]
=
{
pref
:
user_preferences
.
get
(
pref
)
for
pref
in
USER_PREFERENCES_WHITE_LIST
if
pref
in
user_preferences
}
else
:
xblock_user
.
opt_attrs
[
ATTR_KEY_IS_AUTHENTICATED
]
=
False
...
...
openedx/core/djangoapps/user_api/models.py
View file @
1ab52f8b
...
...
@@ -31,7 +31,7 @@ class UserPreference(models.Model):
unique_together
=
(
"user"
,
"key"
)
@classmethod
def
get_value
(
cls
,
user
,
preference_key
):
def
get_value
(
cls
,
user
,
preference_key
,
default
=
None
):
"""Gets the user preference value for a given key.
Note:
...
...
@@ -42,15 +42,16 @@ class UserPreference(models.Model):
Arguments:
user (User): The user whose preference should be set.
preference_key (str): The key for the user preference.
default: The object to return if user does not have preference key set
Returns:
The user preference value, or
None
if one is not set.
The user preference value, or
default
if one is not set.
"""
try
:
user_preference
=
cls
.
objects
.
get
(
user
=
user
,
key
=
preference_key
)
return
user_preference
.
value
except
cls
.
DoesNotExist
:
return
None
return
default
@receiver
(
pre_save
,
sender
=
UserPreference
)
...
...
openedx/core/djangoapps/user_api/tests/test_models.py
View file @
1ab52f8b
...
...
@@ -93,6 +93,10 @@ class UserPreferenceModelTest(ModuleStoreTestCase):
pref
=
UserPreference
.
get_value
(
user
,
'testkey_none'
)
self
.
assertIsNone
(
pref
)
# get default value for key that doesn't exist for user
pref
=
UserPreference
.
get_value
(
user
,
'testkey_none'
,
'default_value'
)
self
.
assertEqual
(
'default_value'
,
pref
)
class
TestUserPreferenceEvents
(
UserSettingsEventTestMixin
,
TestCase
):
"""
...
...
openedx/core/lib/time_zone_utils.py
View file @
1ab52f8b
...
...
@@ -11,10 +11,8 @@ def get_user_time_zone(user):
Returns pytz time zone object of the user's time zone if available or UTC time zone if unavailable
"""
#TODO: exception for unknown timezones?
time_zone
=
user
.
preferences
.
model
.
get_value
(
user
,
"time_zone"
)
if
time_zone
is
not
None
:
return
timezone
(
time_zone
)
return
utc
time_zone
=
user
.
preferences
.
model
.
get_value
(
user
,
"time_zone"
,
'utc'
)
return
timezone
(
time_zone
)
def
_format_time_zone_string
(
time_zone
,
date_time
,
format_string
):
...
...
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