diff --git a/common/lib/capa/capa/correctmap.py b/common/lib/capa/capa/correctmap.py
index 096f28257b..85376fb526 100644
--- a/common/lib/capa/capa/correctmap.py
+++ b/common/lib/capa/capa/correctmap.py
@@ -1,4 +1,4 @@
-#-----------------------------------------------------------------------------
+# -----------------------------------------------------------------------------
# class used to store graded responses to CAPA questions
#
# Used by responsetypes and capa_problem
@@ -22,6 +22,7 @@ class CorrectMap(object):
Behaves as a dict.
"""
+
def __init__(self, *args, **kwargs):
# start with empty dict
self.cmap = dict()
@@ -46,7 +47,7 @@ class CorrectMap(object):
hint='',
hintmode=None,
queuestate=None,
- answervariable=None, # pylint: disable=C0330
+ answervariable=None, # pylint: disable=C0330
**kwargs
):
@@ -95,7 +96,7 @@ class CorrectMap(object):
return
# create new dict entries
- if not isinstance(correct_map.values()[0], dict):
+ if not isinstance(list(correct_map.values())[0], dict):
# special migration
for k in correct_map:
self.set(k, correctness=correct_map[k])
diff --git a/common/lib/capa/capa/customrender.py b/common/lib/capa/capa/customrender.py
index bf89e102ff..258bfa4dc6 100644
--- a/common/lib/capa/capa/customrender.py
+++ b/common/lib/capa/capa/customrender.py
@@ -6,6 +6,8 @@ These tags do not have state, so they just get passed the system (for access to
and the xml element.
"""
+from __future__ import absolute_import
+
import logging
import re
import xml.sax.saxutils as saxutils
@@ -19,7 +21,8 @@ log = logging.getLogger(__name__)
registry = TagRegistry()
-#-----------------------------------------------------------------------------
+
+# -----------------------------------------------------------------------------
class MathRenderer(object):
@@ -54,16 +57,19 @@ class MathRenderer(object):
Return the contents of this tag, rendered to html, as an etree element.
"""
# TODO: why are there nested html tags here?? Why are there html tags at all, in fact?
+ # xss-lint: disable=python-interpolate-html
html = '%s%s' % (
self.mathstr, saxutils.escape(self.xml.tail))
try:
xhtml = etree.XML(html)
except Exception as err:
if self.system.DEBUG:
+ # xss-lint: disable=python-interpolate-html
msg = '
Error %s
' % (
- str(err).replace('<', '<'))
+ str(err).replace('<', '<')) # xss-lint: disable=python-custom-escape
+ # xss-lint: disable=python-interpolate-html
msg += ('
Failed to construct math expression from
%s
' %
- html.replace('<', '<'))
+ html.replace('<', '<')) # xss-lint: disable=python-custom-escape
msg += "
"
log.error(msg)
return etree.XML(msg)
@@ -74,7 +80,8 @@ class MathRenderer(object):
registry.register(MathRenderer)
-#-----------------------------------------------------------------------------
+
+# -----------------------------------------------------------------------------
class SolutionRenderer(object):
@@ -96,9 +103,11 @@ class SolutionRenderer(object):
html = self.system.render_template("solutionspan.html", context)
return etree.XML(html)
+
registry.register(SolutionRenderer)
-#-----------------------------------------------------------------------------
+
+# -----------------------------------------------------------------------------
class TargetedFeedbackRenderer(object):
@@ -116,11 +125,14 @@ class TargetedFeedbackRenderer(object):
"""
Return the contents of this tag, rendered to html, as an etree element.
"""
+ # xss-lint: disable=python-wrap-html
html = ''.format(etree.tostring(self.xml))
try:
xhtml = etree.XML(html)
+
except Exception as err: # pylint: disable=broad-except
if self.system.DEBUG:
+ # xss-lint: disable=python-wrap-html
msg = """
@@ -135,9 +147,11 @@ class TargetedFeedbackRenderer(object):
raise
return xhtml
+
registry.register(TargetedFeedbackRenderer)
-#-----------------------------------------------------------------------------
+
+# -----------------------------------------------------------------------------
class ClarificationRenderer(object):
@@ -167,4 +181,5 @@ class ClarificationRenderer(object):
xml.tail = self.tail
return xml
+
registry.register(ClarificationRenderer)
diff --git a/common/lib/capa/capa/safe_exec/tests/test_safe_exec.py b/common/lib/capa/capa/safe_exec/tests/test_safe_exec.py
index 3b29b0b43f..a53184fc3e 100644
--- a/common/lib/capa/capa/safe_exec/tests/test_safe_exec.py
+++ b/common/lib/capa/capa/safe_exec/tests/test_safe_exec.py
@@ -11,10 +11,10 @@ import unittest
import pytest
import six
-from six import text_type, unichr
-from six.moves import range
from codejail.jail_code import is_configured
from codejail.safe_exec import SafeExecException
+from six import text_type, unichr
+from six.moves import range
from capa.safe_exec import safe_exec, update_hash
diff --git a/common/lib/capa/capa/xqueue_interface.py b/common/lib/capa/capa/xqueue_interface.py
index 72cf2b701e..f269b70e77 100644
--- a/common/lib/capa/capa/xqueue_interface.py
+++ b/common/lib/capa/capa/xqueue_interface.py
@@ -1,12 +1,14 @@
#
# LMS Interface to external queueing system (xqueue)
#
+from __future__ import absolute_import
+
import hashlib
import json
import logging
import requests
-
+import six
log = logging.getLogger(__name__)
dateformat = '%Y%m%d%H%M%S'
@@ -70,7 +72,7 @@ class XQueueInterface(object):
"""
def __init__(self, url, django_auth, requests_auth=None):
- self.url = unicode(url)
+ self.url = six.text_type(url)
self.auth = django_auth
self.session = requests.Session()
self.session.auth = requests_auth
@@ -111,7 +113,7 @@ class XQueueInterface(object):
f.seek(0)
(error, msg) = self._send_to_queue(header, body, files_to_upload)
- return (error, msg)
+ return error, msg
def _login(self):
payload = {
@@ -139,13 +141,13 @@ class XQueueInterface(object):
)
except requests.exceptions.ConnectionError as err:
log.error(err)
- return (1, 'cannot connect to server')
+ return 1, 'cannot connect to server'
except requests.exceptions.ReadTimeout as err:
log.error(err)
- return (1, 'failed to read from the server')
+ return 1, 'failed to read from the server'
if response.status_code not in [200]:
- return (1, 'unexpected HTTP status code [%d]' % response.status_code)
+ return 1, 'unexpected HTTP status code [%d]' % response.status_code
return parse_xreply(response.text)