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
25963797
Commit
25963797
authored
Aug 11, 2014
by
Calen Pennington
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #3227 from FiloSottile/enforce_type
Enforce type of the XBlocks Fields when set
parents
df83f527
5c455f2a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
56 additions
and
3 deletions
+56
-3
AUTHORS
+2
-2
common/lib/xmodule/xmodule/fields.py
+20
-0
common/lib/xmodule/xmodule/tests/test_fields.py
+33
-0
requirements/edx/github.txt
+1
-1
No files found.
AUTHORS
View file @
25963797
...
...
@@ -166,4 +166,5 @@ Nicholas Dupoux <njdupoux1994@gmail.com>
John Eskew <jeskew@edx.org>
Juanan Pereira <juanan.pereira@ehu.es>
Clinton Blackburn <cblackburn@edx.org>
Dennis Jen <djen@edx.org>
\ No newline at end of file
Dennis Jen <djen@edx.org>
Filippo Valsorda <hi@filippo.io>
common/lib/xmodule/xmodule/fields.py
View file @
25963797
...
...
@@ -80,6 +80,8 @@ class Date(Field):
else
:
raise
TypeError
(
"Cannot convert {!r} to json"
.
format
(
value
))
enforce_type
=
from_json
TIMEDELTA_REGEX
=
re
.
compile
(
r'^((?P<days>\d+?) day(?:s?))?(\s)?((?P<hours>\d+?) hour(?:s?))?(\s)?((?P<minutes>\d+?) minute(?:s)?)?(\s)?((?P<seconds>\d+?) second(?:s)?)?$'
)
...
...
@@ -117,6 +119,15 @@ class Timedelta(Field):
values
.
append
(
"
%
d
%
s"
%
(
cur_value
,
attr
))
return
' '
.
join
(
values
)
def
enforce_type
(
self
,
value
):
"""
Ensure that when set explicitly the Field is set to a timedelta
"""
if
isinstance
(
value
,
datetime
.
timedelta
)
or
value
is
None
:
return
value
return
self
.
from_json
(
value
)
class
RelativeTime
(
Field
):
"""
...
...
@@ -219,3 +230,12 @@ class RelativeTime(Field):
if
len
(
stringified
)
==
7
:
stringified
=
'0'
+
stringified
return
stringified
def
enforce_type
(
self
,
value
):
"""
Ensure that when set explicitly the Field is set to a timedelta
"""
if
isinstance
(
value
,
datetime
.
timedelta
)
or
value
is
None
:
return
value
return
self
.
from_json
(
value
)
common/lib/xmodule/xmodule/tests/test_fields.py
View file @
25963797
...
...
@@ -41,6 +41,19 @@ class DateTest(unittest.TestCase):
DateTest
.
date
.
from_json
(
"2013-01-01T00:00:00+01:00"
),
datetime
.
timedelta
(
hours
=
1
,
seconds
=
1
))
def
test_enforce_type
(
self
):
self
.
assertEqual
(
DateTest
.
date
.
enforce_type
(
None
),
None
)
self
.
assertEqual
(
DateTest
.
date
.
enforce_type
(
""
),
None
)
self
.
assertEqual
(
DateTest
.
date
.
enforce_type
(
"2012-12-31T23:00:01"
),
datetime
.
datetime
(
2012
,
12
,
31
,
23
,
0
,
1
,
tzinfo
=
UTC
()))
self
.
assertEqual
(
DateTest
.
date
.
enforce_type
(
1234567890000
),
datetime
.
datetime
(
2009
,
2
,
13
,
23
,
31
,
30
,
tzinfo
=
UTC
()))
self
.
assertEqual
(
DateTest
.
date
.
enforce_type
(
datetime
.
datetime
(
2014
,
5
,
9
,
21
,
1
,
27
,
tzinfo
=
UTC
())),
datetime
.
datetime
(
2014
,
5
,
9
,
21
,
1
,
27
,
tzinfo
=
UTC
()))
with
self
.
assertRaises
(
TypeError
):
DateTest
.
date
.
enforce_type
([
1
])
def
test_return_None
(
self
):
self
.
assertIsNone
(
DateTest
.
date
.
from_json
(
""
))
self
.
assertIsNone
(
DateTest
.
date
.
from_json
(
None
))
...
...
@@ -102,6 +115,16 @@ class TimedeltaTest(unittest.TestCase):
datetime
.
timedelta
(
days
=
1
,
seconds
=
46799
)
)
def
test_enforce_type
(
self
):
self
.
assertEqual
(
TimedeltaTest
.
delta
.
enforce_type
(
None
),
None
)
self
.
assertEqual
(
TimedeltaTest
.
delta
.
enforce_type
(
datetime
.
timedelta
(
days
=
1
,
seconds
=
46799
)),
datetime
.
timedelta
(
days
=
1
,
seconds
=
46799
))
self
.
assertEqual
(
TimedeltaTest
.
delta
.
enforce_type
(
'1 day 46799 seconds'
),
datetime
.
timedelta
(
days
=
1
,
seconds
=
46799
))
with
self
.
assertRaises
(
TypeError
):
TimedeltaTest
.
delta
.
enforce_type
([
1
])
def
test_to_json
(
self
):
self
.
assertEqual
(
'1 days 46799 seconds'
,
...
...
@@ -143,6 +166,16 @@ class RelativeTimeTest(unittest.TestCase):
with
self
.
assertRaises
(
ValueError
):
RelativeTimeTest
.
delta
.
from_json
(
"77:77:77"
)
def
test_enforce_type
(
self
):
self
.
assertEqual
(
RelativeTimeTest
.
delta
.
enforce_type
(
None
),
None
)
self
.
assertEqual
(
RelativeTimeTest
.
delta
.
enforce_type
(
datetime
.
timedelta
(
days
=
1
,
seconds
=
46799
)),
datetime
.
timedelta
(
days
=
1
,
seconds
=
46799
))
self
.
assertEqual
(
RelativeTimeTest
.
delta
.
enforce_type
(
'0:05:07'
),
datetime
.
timedelta
(
seconds
=
307
))
with
self
.
assertRaises
(
TypeError
):
RelativeTimeTest
.
delta
.
enforce_type
([
1
])
def
test_to_json
(
self
):
self
.
assertEqual
(
"01:02:03"
,
...
...
requirements/edx/github.txt
View file @
25963797
...
...
@@ -17,7 +17,7 @@
-e git+https://github.com/appliedsec/pygeoip.git@95e69341cebf5a6a9fbf7c4f5439d458898bdc3b#egg=pygeoip
# Our libraries:
-e git+https://github.com/edx/XBlock.git@
aed7a2c51a59836e435259ad0fb41f8e865fa530
#egg=XBlock
-e git+https://github.com/edx/XBlock.git@
f0e53538be7ce90584a03cc7dd3f06bd43e12ac2
#egg=XBlock
-e git+https://github.com/edx/codejail.git@71f5c5616e2a73ae8cecd1ff2362774a773d3665#egg=codejail
-e git+https://github.com/edx/diff-cover.git@v0.5.0#egg=diff_cover
-e git+https://github.com/edx/js-test-tool.git@v0.1.5#egg=js_test_tool
...
...
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