Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
C
course-discovery
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
course-discovery
Commits
0627d608
Commit
0627d608
authored
Jul 24, 2017
by
zubair-arbi
Committed by
Zubair Afzal
Jul 26, 2017
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ENT-529
Populate course run effort values from Drupal API
parent
025c7b57
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
59 additions
and
0 deletions
+59
-0
course_discovery/apps/course_metadata/data_loaders/marketing_site.py
+24
-0
course_discovery/apps/course_metadata/data_loaders/tests/test_marketing_site.py
+35
-0
No files found.
course_discovery/apps/course_metadata/data_loaders/marketing_site.py
View file @
0627d608
...
...
@@ -2,6 +2,7 @@ import abc
import
concurrent.futures
import
datetime
import
logging
import
re
from
urllib.parse
import
parse_qs
,
urlencode
,
urlparse
from
uuid
import
UUID
...
...
@@ -418,6 +419,7 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
end
=
data
.
get
(
'field_course_end_date'
)
end
=
datetime
.
datetime
.
fromtimestamp
(
int
(
end
),
tz
=
pytz
.
UTC
)
if
end
else
None
weeks_to_complete
=
data
.
get
(
'field_course_required_weeks'
)
min_effort
,
max_effort
=
self
.
get_min_max_effort_per_week
(
data
)
defaults
=
{
'key'
:
key
,
...
...
@@ -435,6 +437,8 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
'video'
:
course
.
video
,
'course'
:
course
,
'short_description_override'
:
self
.
clean_html
(
data
[
'field_course_sub_title_short'
])
or
None
,
'min_effort'
:
min_effort
,
'max_effort'
:
max_effort
,
}
if
weeks_to_complete
:
...
...
@@ -495,6 +499,26 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
hidden
=
data
.
get
(
'field_couse_is_hidden'
,
False
)
return
hidden
is
True
def
get_min_max_effort_per_week
(
self
,
data
):
"""
Parse effort value from drupal course data which have specific format.
"""
effort_per_week
=
data
.
get
(
'field_course_effort'
,
''
)
min_effort
=
None
max_effort
=
None
# Ignore effort values in minutes
if
not
effort_per_week
or
'minutes'
in
effort_per_week
:
return
min_effort
,
max_effort
effort_values
=
[
int
(
keyword
)
for
keyword
in
re
.
split
(
r'\s|-|–|,|\+|~'
,
effort_per_week
)
if
keyword
.
isdigit
()]
if
len
(
effort_values
)
==
1
:
min_effort
=
effort_values
[
0
]
if
len
(
effort_values
)
==
2
:
min_effort
=
effort_values
[
0
]
max_effort
=
effort_values
[
1
]
return
min_effort
,
max_effort
def
_get_objects_by_uuid
(
self
,
object_type
,
raw_objects_data
):
uuids
=
[
_object
.
get
(
'uuid'
)
for
_object
in
raw_objects_data
]
return
object_type
.
objects
.
filter
(
uuid__in
=
uuids
)
...
...
course_discovery/apps/course_metadata/data_loaders/tests/test_marketing_site.py
View file @
0627d608
...
...
@@ -335,6 +335,41 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
data
=
{
'field_couse_is_hidden'
:
hidden
}
self
.
assertEqual
(
self
.
loader
.
get_hidden
(
data
),
expected
)
@ddt.data
(
(
None
,
None
,
None
),
(
'Browse at your own pace.'
,
None
,
None
),
(
'1.5 - 3.5 hours/week'
,
None
,
None
),
(
'8 hours/week'
,
8
,
None
),
(
'2.5-5 hours.'
,
5
,
None
),
(
'5+ hours per week'
,
5
,
None
),
(
'3 horas por semana'
,
3
,
None
),
(
'1 - 1.5 hours per week'
,
1
,
None
),
(
'6 hours of video/300 multiple choice questions'
,
6
,
None
),
(
'6 to 9 hours/week'
,
6
,
9
),
(
'4-6 hours per week'
,
4
,
6
),
(
'About 5-12 hrs/week.'
,
5
,
12
),
(
'4 - 8 hours/week | 小时/周'
,
4
,
8
),
(
'6 horas/semana, 6 hours/week'
,
6
,
6
),
(
'Estimated effort: 4–5 hours per week.'
,
4
,
5
),
(
'4-6 hours per week depending on the background of the student.'
,
4
,
6
),
(
'每周 2-3 小时 | 2-3 hours per week'
,
None
,
None
),
(
'Part 1: 3 hours; Part 2: 4 hours; Part 3: 2 hours'
,
None
,
None
),
(
'From 10 - 60 minutes, or as much time as you want.'
,
None
,
None
),
(
'3-4 hours per unit (recommended pace: 1 unit per week)'
,
None
,
None
),
(
'5-8 hours/week; 2-3 hours for lectures; 3-5 hours for homework/self-study'
,
None
,
None
),
)
@ddt.unpack
def
test_get_min_max_effort_per_week
(
self
,
course_effort_string
,
expected_min_effort
,
expected_max_effort
):
"""
Verify that the method `get_min_max_effort_per_week` correctly parses
most of the the effort values which have specific format and maps them
to min effort and max effort values.
"""
data
=
{
'field_course_effort'
:
course_effort_string
}
min_effort
,
max_effort
=
self
.
loader
.
get_min_max_effort_per_week
(
data
)
self
.
assertEqual
(
min_effort
,
expected_min_effort
)
self
.
assertEqual
(
max_effort
,
expected_max_effort
)
def
test_get_hidden_missing
(
self
):
"""Verify that the get_hidden method can cope with a missing field."""
self
.
assertEqual
(
self
.
loader
.
get_hidden
({}),
False
)
...
...
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