Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
import inspect
import random
import string # pylint: disable=W0402
import time
from xblock.core import XBlock
from xblock.fields import Integer, Scope, String, Any, Boolean, Dict
from xblock.run_script import run_script
from xblock.fragment import Fragment
class ProblemBlock(XBlock):
"""A generalized container of InputBlocks and Checkers.
"""
script = String(help="Python code to compute values", scope=Scope.content, default="")
seed = Integer(help="Random seed for this student", scope=Scope.user_state, default=0)
problem_attempted = Boolean(help="Has the student attempted this problem?", scope=Scope.user_state, default=False)
has_children = True
@classmethod
def parse_xml(cls, node, runtime, keys):
block = runtime.construct_xblock_from_class(cls, keys)
# Find
def _key(self, block, name):
"""
Resolves `name` to a key, in the following form:
KeyValueStore.Key(
scope=field.scope,
user_id=student_id,
block_scope_id=block_id,
field_name=name,
block_family=block.entry_point,
)
"""
field = self._getfield(block, name)
if field.scope in (Scope.children, Scope.parent):
block_id = block.scope_ids.usage_id
user_id = None
else:
block_scope = field.scope.block
if block_scope == BlockScope.ALL:
block_id = None
elif block_scope == BlockScope.USAGE:
block_id = block.scope_ids.usage_id
elif block_scope == BlockScope.DEFINITION:
block_id = block.scope_ids.def_id
elif block_scope == BlockScope.TYPE:
block_id = block.scope_ids.block_type
if field.scope.user == UserScope.ONE:
user_id = block.scope_ids.user_id
scope=Scope.user_state,
default=0
)
weight = Float(
default=1,
scope=Scope.settings
)
has_score = Boolean(
display_name=_("Scored"),
help=_("Select False if this component will not receive a numerical score from the Scorm"),
default=True,
scope=Scope.settings
)
icon_class = String(
default="video",
scope=Scope.settings,
)
width = Integer(
display_name=_("Display Width (px)"),
help=_('Width of iframe, if empty, the default 100%'),
scope=Scope.settings
)
height = Integer(
display_name=_("Display Height (px)"),
help=_('Height of iframe'),
default=450,
scope=Scope.settings
)
has_author_view = True
def resource_string(self, path):
class ThumbsBlock(XBlock):
"""
An XBlock with thumbs-up/thumbs-down voting.
Vote totals are stored for all students to see. Each student is recorded
as has-voted or not.
This demonstrates multiple data scopes and ajax handlers.
"""
upvotes = Integer(help="Number of up votes", default=0, scope=Scope.user_state_summary)
downvotes = Integer(help="Number of down votes", default=0, scope=Scope.user_state_summary)
voted = Boolean(help="Has this student voted?", default=False, scope=Scope.user_state)
def student_view(self, context=None): # pylint: disable=W0613
"""
Create a fragment used to display the XBlock to a student.
`context` is a dictionary used to configure the display (unused)
Returns a `Fragment` object specifying the HTML, CSS, and JavaScript
to display.
"""
# Load the HTML fragment from within the package and fill in the template
html_str = pkg_resources.resource_string(__name__, "static/html/thumbs.html")
frag = Fragment(unicode(html_str).format(self=self))
# Load the CSS and JavaScript fragments from within the package
css_str = pkg_resources.resource_string(__name__, "static/css/thumbs.css")
{'children': [frag.body_html() for frag in child_frags]}))
return result
class HtmlBlock(XBlock):
"""An XBlock which presents a single block of HTML.
See xmodule.html_module.HtmlModule in
https://github.com/edx/edx-platform.
"""
content = String(
display_name='HTML Text',
help='A block of HTML text',
default='HTML text',
scope=Scope.content)
def student_view(self, context=None):
frag = Fragment()
frag.add_content(self.content)
return frag
@classmethod
def parse_xml(cls, node, runtime, keys, id_generator):
block = runtime.construct_xblock_from_class(cls, keys)
block.content = unicode(node.text or u'')
for child in node:
block.content += etree.tostring(
child,
# Store the content with HTML rather than XML structure so as
# to correctly handle edge cases such as '<br>' (not '<br>')