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
091d6aeb
Commit
091d6aeb
authored
Mar 04, 2015
by
Nimisha Asthagiri
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Mobile API: Modularize VideoOutline code
parent
40dd4f1f
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
78 additions
and
112 deletions
+78
-112
lms/djangoapps/mobile_api/video_outlines/serializers.py
+78
-112
No files found.
lms/djangoapps/mobile_api/video_outlines/serializers.py
View file @
091d6aeb
...
...
@@ -30,108 +30,17 @@ class BlockOutline(object):
self
.
local_cache
[
'course_videos'
]
=
{}
def
__iter__
(
self
):
child_to_parent
=
{}
stack
=
[
self
.
start_block
]
# path should be optional
def
path
(
block
):
"""path for block"""
block_path
=
[]
while
block
in
child_to_parent
:
block
=
child_to_parent
[
block
]
if
block
is
not
self
.
start_block
:
block_path
.
append
({
# to be consistent with other edx-platform clients, return the defaulted display name
'name'
:
block
.
display_name_with_default
,
'category'
:
block
.
category
,
'id'
:
unicode
(
block
.
location
)
})
return
reversed
(
block_path
)
def
find_urls
(
block
):
def
parent_or_requested_block_type
(
usage_key
):
"""
Find the section and unit urls for a block.
Returns:
unit_url, section_url:
unit_url (str): The url of a unit
section_url (str): The url of a section
Returns whether the usage_key's block_type is one of self.block_types or a parent type.
"""
block_path
=
[]
while
block
in
child_to_parent
:
block
=
child_to_parent
[
block
]
block_path
.
append
(
block
)
block_list
=
list
(
reversed
(
block_path
))
block_count
=
len
(
block_list
)
chapter_id
=
block_list
[
1
]
.
location
.
block_id
if
block_count
>
1
else
None
section
=
block_list
[
2
]
if
block_count
>
2
else
None
position
=
None
#position is found traversing the section block
if
block_count
>
3
:
position
=
1
for
block
in
section
.
children
:
if
block
.
name
==
block_list
[
3
]
.
url_name
:
break
position
+=
1
if
chapter_id
is
None
:
no_chapter_url
=
reverse
(
"courseware"
,
kwargs
=
dict
(
course_id
=
unicode
(
self
.
course_id
),
),
request
=
self
.
request
)
return
no_chapter_url
,
no_chapter_url
elif
section
is
None
:
no_section_url
=
reverse
(
"courseware_chapter"
,
kwargs
=
dict
(
course_id
=
unicode
(
self
.
course_id
),
chapter
=
chapter_id
),
request
=
self
.
request
)
return
no_section_url
,
no_section_url
elif
position
is
None
:
no_position_url
=
reverse
(
"courseware_section"
,
kwargs
=
dict
(
course_id
=
unicode
(
self
.
course_id
),
chapter
=
chapter_id
,
section
=
section
.
url_name
),
request
=
self
.
request
)
return
no_position_url
,
no_position_url
else
:
section_url
=
reverse
(
"courseware_section"
,
kwargs
=
dict
(
course_id
=
unicode
(
self
.
course_id
),
chapter
=
chapter_id
,
section
=
section
.
url_name
),
request
=
self
.
request
)
unit_url
=
reverse
(
"courseware_position"
,
kwargs
=
dict
(
course_id
=
unicode
(
self
.
course_id
),
chapter
=
chapter_id
,
section
=
section
.
url_name
,
position
=
position
),
request
=
self
.
request
)
return
unit_url
,
section_url
user
=
self
.
request
.
user
return
(
usage_key
.
block_type
in
self
.
block_types
or
usage_key
.
block_type
in
BLOCK_TYPES_WITH_CHILDREN
)
child_to_parent
=
{}
stack
=
[
self
.
start_block
]
while
stack
:
curr_block
=
stack
.
pop
()
...
...
@@ -145,12 +54,12 @@ class BlockOutline(object):
continue
if
curr_block
.
location
.
block_type
in
self
.
block_types
:
if
not
has_access
(
user
,
'load'
,
curr_block
,
course_key
=
self
.
course_id
):
if
not
has_access
(
self
.
request
.
user
,
'load'
,
curr_block
,
course_key
=
self
.
course_id
):
continue
summary_fn
=
self
.
block_types
[
curr_block
.
category
]
block_path
=
list
(
path
(
curr_block
))
unit_url
,
section_url
=
find_urls
(
curr_block
)
block_path
=
list
(
path
(
curr_block
,
child_to_parent
,
self
.
start_block
))
unit_url
,
section_url
=
find_urls
(
self
.
course_id
,
curr_block
,
child_to_parent
,
self
.
request
)
yield
{
"path"
:
block_path
,
...
...
@@ -160,21 +69,78 @@ class BlockOutline(object):
"summary"
:
summary_fn
(
self
.
course_id
,
curr_block
,
self
.
request
,
self
.
local_cache
)
}
def
parent_or_requested_block_type
(
usage_key
):
"""
Returns whether the usage_key's block_type is one of self.block_types or a parent type.
"""
return
(
usage_key
.
block_type
in
self
.
block_types
or
usage_key
.
block_type
in
BLOCK_TYPES_WITH_CHILDREN
)
if
curr_block
.
has_children
:
for
block
in
reversed
(
curr_block
.
get_children
(
usage_key_filter
=
parent_or_requested_block_type
)):
children
=
curr_block
.
get_children
(
usage_key_filter
=
parent_or_requested_block_type
)
for
block
in
reversed
(
children
):
stack
.
append
(
block
)
child_to_parent
[
block
]
=
curr_block
def
path
(
block
,
child_to_parent
,
start_block
):
"""path for block"""
block_path
=
[]
while
block
in
child_to_parent
:
block
=
child_to_parent
[
block
]
if
block
is
not
start_block
:
block_path
.
append
({
# to be consistent with other edx-platform clients, return the defaulted display name
'name'
:
block
.
display_name_with_default
,
'category'
:
block
.
category
,
'id'
:
unicode
(
block
.
location
)
})
return
reversed
(
block_path
)
def
find_urls
(
course_id
,
block
,
child_to_parent
,
request
):
"""
Find the section and unit urls for a block.
Returns:
unit_url, section_url:
unit_url (str): The url of a unit
section_url (str): The url of a section
"""
block_path
=
[]
while
block
in
child_to_parent
:
block
=
child_to_parent
[
block
]
block_path
.
append
(
block
)
block_list
=
list
(
reversed
(
block_path
))
block_count
=
len
(
block_list
)
chapter_id
=
block_list
[
1
]
.
location
.
block_id
if
block_count
>
1
else
None
section
=
block_list
[
2
]
if
block_count
>
2
else
None
position
=
None
if
block_count
>
3
:
position
=
1
for
block
in
section
.
children
:
if
block
.
name
==
block_list
[
3
]
.
url_name
:
break
position
+=
1
kwargs
=
{
'course_id'
:
unicode
(
course_id
)}
if
chapter_id
is
None
:
no_chapter_url
=
reverse
(
"courseware"
,
kwargs
=
kwargs
,
request
=
request
)
return
no_chapter_url
,
no_chapter_url
kwargs
[
'chapter'
]
=
chapter_id
if
section
is
None
:
no_section_url
=
reverse
(
"courseware_chapter"
,
kwargs
=
kwargs
,
request
=
request
)
return
no_section_url
,
no_section_url
kwargs
[
'section'
]
=
section
.
url_name
if
position
is
None
:
no_position_url
=
reverse
(
"courseware_section"
,
kwargs
=
kwargs
,
request
=
request
)
return
no_position_url
,
no_position_url
section_url
=
reverse
(
"courseware_section"
,
kwargs
=
kwargs
,
request
=
request
)
kwargs
[
'position'
]
=
position
unit_url
=
reverse
(
"courseware_position"
,
kwargs
=
kwargs
,
request
=
request
)
return
unit_url
,
section_url
def
video_summary
(
course
,
course_id
,
video_descriptor
,
request
,
local_cache
):
"""
returns summary dict for the given video module
...
...
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