From d4b0968e3a94981ae0e0155bf95a4033adf2b92c Mon Sep 17 00:00:00 2001 From: Jeremy Bowman Date: Tue, 22 Oct 2019 17:57:01 -0400 Subject: [PATCH] Fix JSON parsing in edxnotes.helpers BOM-990 (#22122) --- common/lib/capa/capa/safe_exec/safe_exec.py | 3 ++- lms/djangoapps/edxnotes/helpers.py | 2 +- lms/djangoapps/edxnotes/tests.py | 16 ++++++++-------- 3 files changed, 11 insertions(+), 10 deletions(-) diff --git a/common/lib/capa/capa/safe_exec/safe_exec.py b/common/lib/capa/capa/safe_exec/safe_exec.py index 52e676e9fa..0504310593 100644 --- a/common/lib/capa/capa/safe_exec/safe_exec.py +++ b/common/lib/capa/capa/safe_exec/safe_exec.py @@ -47,7 +47,8 @@ lazymod_py_file = lazymod.__file__ if lazymod_py_file.endswith("c"): lazymod_py_file = lazymod_py_file[:-1] -lazymod_py = open(lazymod_py_file).read() +with open(lazymod_py_file) as f: + lazymod_py = f.read() LAZY_IMPORTS = [lazymod_py] for name, modname in ASSUMED_IMPORTS: diff --git a/lms/djangoapps/edxnotes/helpers.py b/lms/djangoapps/edxnotes/helpers.py index c8a28b26dc..9e64d83769 100644 --- a/lms/djangoapps/edxnotes/helpers.py +++ b/lms/djangoapps/edxnotes/helpers.py @@ -344,7 +344,7 @@ def get_notes(request, course, page=DEFAULT_PAGE, page_size=DEFAULT_PAGE_SIZE, t response = send_request(request.user, course.id, page, page_size, path, text) try: - collection = json.loads(response.content) + collection = json.loads(response.content.decode('utf-8')) except ValueError: log.error(u"Invalid JSON response received from notes api: response_content=%s", response.content) raise EdxNotesParseError(_("Invalid JSON response received from notes api.")) diff --git a/lms/djangoapps/edxnotes/tests.py b/lms/djangoapps/edxnotes/tests.py index bfaebe81d7..1faf285239 100644 --- a/lms/djangoapps/edxnotes/tests.py +++ b/lms/djangoapps/edxnotes/tests.py @@ -340,7 +340,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): } ] } - ) + ).encode('utf-8') six.assertCountEqual( self, @@ -410,7 +410,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): """ Tests the result if incorrect json is received. """ - mock_get.return_value.content = "Error" + mock_get.return_value.content = b"Error" self.assertRaises(EdxNotesParseError, helpers.get_notes, self.request, self.course) @patch("edxnotes.helpers.requests.get", autospec=True) @@ -418,7 +418,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): """ Tests the result if an empty response is received. """ - mock_get.return_value.content = json.dumps({}) + mock_get.return_value.content = json.dumps({}).encode('utf-8') self.assertRaises(EdxNotesParseError, helpers.get_notes, self.request, self.course) @patch("edxnotes.helpers.requests.get", autospec=True) @@ -447,7 +447,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): u"updated": datetime(2014, 11, 19, 8, 6, 16, 00000).isoformat(), } ] - }) + }).encode('utf-8') six.assertCountEqual( self, @@ -517,7 +517,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): """ Tests the result if incorrect json is received. """ - mock_get.return_value.content = "Error" + mock_get.return_value.content = b"Error" self.assertRaises(EdxNotesParseError, helpers.get_notes, self.request, self.course) @patch("edxnotes.helpers.requests.get", autospec=True) @@ -525,7 +525,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): """ Tests the result if incorrect data structure is received. """ - mock_get.return_value.content = json.dumps({"1": 2}) + mock_get.return_value.content = json.dumps({"1": 2}).encode('utf-8') self.assertRaises(EdxNotesParseError, helpers.get_notes, self.request, self.course) @patch("edxnotes.helpers.requests.get", autospec=True) @@ -533,7 +533,7 @@ class EdxNotesHelpersTest(ModuleStoreTestCase): """ Tests no results. """ - mock_get.return_value.content = json.dumps(NOTES_API_EMPTY_RESPONSE) + mock_get.return_value.content = json.dumps(NOTES_API_EMPTY_RESPONSE).encode('utf-8') six.assertCountEqual( self, NOTES_VIEW_EMPTY_RESPONSE, @@ -1206,7 +1206,7 @@ class EdxNotesRetireAPITest(ModuleStoreTestCase): """ Tests that 204 response is received on success. """ - mock_post.return_value.content = '' + mock_post.return_value.content = b'' mock_post.return_value.status_code = 204 headers = self._build_jwt_headers(self.superuser) response = self.client.post(