Add i18n attribute to LoncapaSystem
[LMS-1597]
This commit is contained in:
@@ -71,7 +71,11 @@ class LoncapaSystem(object):
|
||||
can provide these resources however make sense for their environment, and
|
||||
this code can remain independent.
|
||||
|
||||
See :class:`ModuleSystem` for documentation of these attributes.
|
||||
Attributes:
|
||||
i18n: an object implementing the `gettext.Translations` interface so
|
||||
that we can use `.ugettext` to localize strings.
|
||||
|
||||
See :class:`ModuleSystem` for documentation of other attributes.
|
||||
|
||||
"""
|
||||
def __init__( # pylint: disable=invalid-name
|
||||
@@ -82,6 +86,7 @@ class LoncapaSystem(object):
|
||||
can_execute_unsafe_code,
|
||||
DEBUG, # pylint: disable=invalid-name
|
||||
filestore,
|
||||
i18n,
|
||||
node_path,
|
||||
render_template,
|
||||
seed, # Why do we do this if we have self.seed?
|
||||
@@ -94,6 +99,7 @@ class LoncapaSystem(object):
|
||||
self.can_execute_unsafe_code = can_execute_unsafe_code
|
||||
self.DEBUG = DEBUG # pylint: disable=invalid-name
|
||||
self.filestore = filestore
|
||||
self.i18n = i18n
|
||||
self.node_path = node_path
|
||||
self.render_template = render_template
|
||||
self.seed = seed # Why do we do this if we have self.seed?
|
||||
|
||||
@@ -875,8 +875,9 @@ class NumericalResponse(LoncapaResponse):
|
||||
correct_ans = evaluator({}, {}, self.correct_answer)
|
||||
except Exception:
|
||||
log.debug("Content error--answer '%s' is not a valid number", self.correct_answer)
|
||||
_ = self.capa_system.i18n.ugettext
|
||||
raise StudentInputError(
|
||||
"There was a problem with the staff answer to this problem"
|
||||
_("There was a problem with the staff answer to this problem")
|
||||
)
|
||||
|
||||
return correct_ans
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
"""Tools for helping with testing capa."""
|
||||
|
||||
import gettext
|
||||
import os
|
||||
import os.path
|
||||
|
||||
@@ -41,6 +42,7 @@ def test_capa_system():
|
||||
can_execute_unsafe_code=lambda: False,
|
||||
DEBUG=True,
|
||||
filestore=fs.osfs.OSFS(os.path.join(TEST_DIR, "test_files")),
|
||||
i18n=gettext.NullTranslations(),
|
||||
node_path=os.environ.get("NODE_PATH", "/usr/local/lib/node_modules"),
|
||||
render_template=tst_render_template,
|
||||
seed=0,
|
||||
|
||||
@@ -1140,6 +1140,24 @@ class NumericalResponseTest(ResponseTest):
|
||||
"Content error--answer '%s' is not a valid number", staff_ans
|
||||
)
|
||||
|
||||
@mock.patch('capa.responsetypes.log')
|
||||
def test_responsetype_i18n(self, mock_log):
|
||||
"""Test that LoncapaSystem has an i18n that works."""
|
||||
staff_ans = "clearly bad syntax )[+1e"
|
||||
problem = self.build_problem(answer=staff_ans, tolerance=1e-3)
|
||||
|
||||
class FakeTranslations(object):
|
||||
"""A fake gettext.Translations object."""
|
||||
def ugettext(self, text):
|
||||
"""Return the 'translation' of `text`."""
|
||||
if text == "There was a problem with the staff answer to this problem":
|
||||
text = "TRANSLATED!"
|
||||
return text
|
||||
problem.capa_system.i18n = FakeTranslations()
|
||||
|
||||
with self.assertRaisesRegexp(StudentInputError, "TRANSLATED!"):
|
||||
self.assert_grade(problem, '1+j', 'correct')
|
||||
|
||||
def test_grade_infinity(self):
|
||||
"""
|
||||
Check that infinity doesn't automatically get marked correct.
|
||||
|
||||
@@ -267,6 +267,7 @@ class CapaMixin(CapaFields):
|
||||
can_execute_unsafe_code=self.system.can_execute_unsafe_code,
|
||||
DEBUG=self.system.DEBUG,
|
||||
filestore=self.system.filestore,
|
||||
i18n=self.system.service(self, "i18n"),
|
||||
node_path=self.system.node_path,
|
||||
render_template=self.system.render_template,
|
||||
seed=self.system.seed, # Why do we do this if we have self.seed?
|
||||
|
||||
Reference in New Issue
Block a user