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
e21b9191
Commit
e21b9191
authored
Dec 27, 2011
by
Piotr Mitros
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replaced libxml2 with lxml.etree
parent
f5965487
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
58 additions
and
50 deletions
+58
-50
courseware/capa_module.py
+9
-8
courseware/content_parser.py
+12
-5
courseware/html_module.py
+1
-1
courseware/module_render.py
+35
-35
courseware/static/css/local.css
+1
-1
No files found.
courseware/capa_module.py
View file @
e21b9191
...
...
@@ -9,7 +9,7 @@ import datetime
import
content_parser
import
libxml2
from
lxml
import
etree
## TODO: Abstract out from Django
from
django.conf
import
settings
...
...
@@ -103,31 +103,32 @@ class LoncapaModule(XModule):
self
.
due_date
=
None
#dom=parseString(xml)
dom2
=
libxml2
.
parseMemory
(
xml
,
len
(
xml
))
#dom2 = libxml2.parseMemory(xml, len(xml))
dom2
=
etree
.
fromstring
(
xml
)
#node=dom.childNodes[0]
#self.due_date=node.getAttribute("due")
self
.
due_date
=
content_parser
.
item
(
dom2
.
xpathEval
(
'/problem/@due'
))
self
.
due_date
=
content_parser
.
item
(
dom2
.
xpath
(
'/problem/@due'
))
#dom2.xpath
Eval('/problem/@due'))
if
len
(
self
.
due_date
)
>
0
:
self
.
due_date
=
dateutil
.
parser
.
parse
(
self
.
due_date
)
else
:
self
.
due_date
=
None
#self.max_attempts=node.getAttribute("attempts")
self
.
max_attempts
=
content_parser
.
item
(
dom2
.
xpath
Eval
(
'/problem/@attempts'
))
self
.
max_attempts
=
content_parser
.
item
(
dom2
.
xpath
(
'/problem/@attempts'
))
if
len
(
self
.
max_attempts
)
>
0
:
self
.
max_attempts
=
int
(
self
.
max_attempts
)
else
:
self
.
max_attempts
=
None
#self.show_answer=node.getAttribute("showanswer")
self
.
show_answer
=
content_parser
.
item
(
dom2
.
xpath
Eval
(
'/problem/@showanswer'
))
self
.
show_answer
=
content_parser
.
item
(
dom2
.
xpath
(
'/problem/@showanswer'
))
if
self
.
show_answer
==
""
:
self
.
show_answer
=
"closed"
self
.
rerandomize
=
content_parser
.
item
(
dom2
.
xpath
Eval
(
'/problem/@rerandomize'
))
self
.
rerandomize
=
content_parser
.
item
(
dom2
.
xpath
(
'/problem/@rerandomize'
))
#self.rerandomize=node.getAttribute("rerandomize")
if
self
.
rerandomize
==
""
:
self
.
rerandomize
=
True
...
...
@@ -143,12 +144,12 @@ class LoncapaModule(XModule):
if
state
!=
None
and
'attempts'
in
state
:
self
.
attempts
=
state
[
'attempts'
]
self
.
filename
=
content_parser
.
item
(
dom2
.
xpath
Eval
(
'/problem/@filename'
))
self
.
filename
=
content_parser
.
item
(
dom2
.
xpath
(
'/problem/@filename'
))
#self.filename=node.getAttribute("filename")
#print self.filename
filename
=
settings
.
DATA_DIR
+
"problems/"
+
self
.
filename
+
".xml"
#self.name=node.getAttribute("name")
self
.
name
=
content_parser
.
item
(
dom2
.
xpath
Eval
(
'/problem/@name'
))
self
.
name
=
content_parser
.
item
(
dom2
.
xpath
(
'/problem/@name'
))
self
.
lcp
=
LoncapaProblem
(
filename
,
self
.
item_id
,
state
)
def
handle_ajax
(
self
,
dispatch
,
get
):
...
...
courseware/content_parser.py
View file @
e21b9191
from
django.conf
import
settings
from
xml.dom.minidom
import
parse
,
parseString
import
libxml2
from
lxml
import
etree
from
auth.models
import
UserProfile
''' This file will eventually form an abstraction layer between the
...
...
@@ -13,7 +15,7 @@ def item(l, default="", process=lambda x:x):
if
len
(
l
)
==
0
:
return
default
elif
len
(
l
)
==
1
:
return
process
(
l
[
0
]
.
getContent
()
)
return
process
(
l
[
0
])
else
:
raise
Exception
(
'Malformed XML'
)
...
...
@@ -25,7 +27,8 @@ def course_file(user):
def
module_xml
(
coursefile
,
module
,
id_tag
,
module_id
):
''' Get XML for a module based on module and module_id. Assumes
module occurs once in courseware XML file.. '''
doc
=
libxml2
.
parseFile
(
coursefile
)
#doc = libxml2.parseFile(coursefile)
doc
=
etree
.
parse
(
coursefile
)
# Sanitize input
if
not
module
.
isalnum
():
...
...
@@ -35,12 +38,14 @@ def module_xml(coursefile, module, id_tag, module_id):
xpath_search
=
'//*/{module}[@{id_tag} = "{id}"]'
.
format
(
module
=
module
,
id_tag
=
id_tag
,
id
=
module_id
)
result_set
=
doc
.
xpathEval
(
xpath_search
)
#result_set=doc.xpathEval(xpath_search)
result_set
=
doc
.
xpath
(
xpath_search
)
if
len
(
result_set
)
>
1
:
print
"WARNING: Potentially malformed course file"
,
module
,
module_id
if
len
(
result_set
)
==
0
:
return
None
return
result_set
[
0
]
.
serialize
()
return
etree
.
tostring
(
result_set
[
0
])
#return result_set[0].serialize()
def
toc_from_xml
(
coursefile
,
active_chapter
,
active_section
):
dom
=
parse
(
coursefile
)
...
...
@@ -50,6 +55,8 @@ def toc_from_xml(coursefile, active_chapter, active_section):
chapters
=
course
.
getElementsByTagName
(
'chapter'
)
ch
=
list
()
for
c
in
chapters
:
if
c
.
getAttribute
(
"name"
)
==
'hidden'
:
continue
sections
=
list
()
for
s
in
c
.
getElementsByTagName
(
'section'
):
sections
.
append
({
'name'
:
s
.
getAttribute
(
"name"
),
...
...
courseware/html_module.py
View file @
e21b9191
from
x_module
import
XModule
from
lxml
import
etree
import
json
...
...
@@ -19,5 +20,4 @@ class HtmlModule(XModule):
return
render_to_string
(
self
.
item_id
,
{
'id'
:
self
.
item_id
})
def
__init__
(
self
,
xml
,
item_id
,
ajax_url
=
None
,
track_url
=
None
,
state
=
None
):
print
"item id"
,
item_id
XModule
.
__init__
(
self
,
xml
,
item_id
,
ajax_url
,
track_url
,
state
)
courseware/module_render.py
View file @
e21b9191
...
...
@@ -30,6 +30,41 @@ import content_parser
import
uuid
modx_modules
=
{
'problem'
:
capa_module
.
LoncapaModule
,
'video'
:
video_module
.
VideoModule
,
'html'
:
html_module
.
HtmlModule
,
'schematic'
:
schematic_module
.
SchematicModule
}
def
modx_dispatch
(
request
,
module
=
None
,
dispatch
=
None
,
id
=
None
):
''' Generic view for extensions. '''
s
=
StudentModule
.
objects
.
filter
(
module_type
=
module
,
student
=
request
.
user
,
module_id
=
id
)
if
len
(
s
)
==
0
:
print
"ls404"
raise
Http404
s
=
s
[
0
]
dispatch
=
dispatch
.
split
(
'?'
)[
0
]
ajax_url
=
'/modx/'
+
module
+
'/'
+
id
+
'/'
id_tag
=
modx_modules
[
module
]
.
id_attribute
#print "X",s.xml, "Y",content_parser.module_xml(module, id_tag, id)
xml
=
content_parser
.
module_xml
(
content_parser
.
course_file
(
request
.
user
),
module
,
id_tag
,
id
)
instance
=
modx_modules
[
module
](
xml
,
s
.
module_id
,
ajax_url
=
ajax_url
,
state
=
s
.
state
)
html
=
instance
.
handle_ajax
(
dispatch
,
request
.
GET
)
s
.
state
=
instance
.
get_state
()
s
.
grade
=
instance
.
get_score
()[
'score'
]
s
.
save
()
return
HttpResponse
(
html
)
def
vertical_module
(
request
,
module
):
''' Layout module which lays out content vertically.
'''
...
...
@@ -81,11 +116,6 @@ def seq_module(request, module):
'type'
:
'sequential'
}
modx_modules
=
{
'problem'
:
capa_module
.
LoncapaModule
,
'video'
:
video_module
.
VideoModule
,
'html'
:
html_module
.
HtmlModule
,
'schematic'
:
schematic_module
.
SchematicModule
}
def
render_x_module
(
request
,
xml_module
):
''' Generic module for extensions. This renders to HTML. '''
# Check if problem has an instance in DB
...
...
@@ -126,36 +156,6 @@ def render_x_module(request, xml_module):
return
content
def
modx_dispatch
(
request
,
module
=
None
,
dispatch
=
None
,
id
=
None
):
''' Generic module for extensions. '''
s
=
StudentModule
.
objects
.
filter
(
module_type
=
module
,
student
=
request
.
user
,
module_id
=
id
)
if
len
(
s
)
==
0
:
print
"ls404"
raise
Http404
s
=
s
[
0
]
dispatch
=
dispatch
.
split
(
'?'
)[
0
]
ajax_url
=
'/modx/'
+
module
+
'/'
+
id
+
'/'
id_tag
=
modx_modules
[
module
]
.
id_attribute
#print "X",s.xml, "Y",content_parser.module_xml(module, id_tag, id)
xml
=
content_parser
.
module_xml
(
content_parser
.
course_file
(
request
.
user
),
module
,
id_tag
,
id
)
instance
=
modx_modules
[
module
](
xml
,
s
.
module_id
,
ajax_url
=
ajax_url
,
state
=
s
.
state
)
html
=
instance
.
handle_ajax
(
dispatch
,
request
.
GET
)
s
.
state
=
instance
.
get_state
()
s
.
grade
=
instance
.
get_score
()[
'score'
]
s
.
save
()
return
HttpResponse
(
html
)
module_types
=
{
'video'
:
render_x_module
,
'html'
:
render_x_module
,
'tab'
:
seq_module
,
...
...
courseware/static/css/local.css
View file @
e21b9191
...
...
@@ -33,7 +33,7 @@
width
:
100%
;
}
.bordered
{
border
:
1px
solid
#AAAAAA
;
}
.bordered
{
border
:
1px
solid
#AAAAAA
;
border-style
:
dotted
;
}
.seq_problem_visited
{
background-color
:
#ccccaa
;}
.seq_video_visited
{
background-color
:
#ccaacc
;}
...
...
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