def test_convert_png_data_url_to_binary_raises_if_prefix_is_missing( self) -> None: image_data_url = urllib.parse.quote(base64.b64encode(b'test123')) self.assertRaisesRegexp( # type: ignore[no-untyped-call] Exception, 'The given string does not represent a PNG data URL.', lambda: utils.convert_png_data_url_to_binary(image_data_url))
def test_convert_png_data_url_to_binary(self) -> None: image_data_url = '%s%s' % (utils.PNG_DATA_URL_PREFIX, urllib.parse.quote( base64.b64encode(b'test123'))) self.assertEqual(utils.convert_png_data_url_to_binary(image_data_url), b'test123')
def get(self): """Handles GET requests.""" # Retrieve user data. user_takeout_object = takeout_service.export_data_for_user( self.user_id) user_data = user_takeout_object.user_data user_images = user_takeout_object.user_images # Ensure that the exported data does not contain a user ID. user_data_json_string = json.dumps(user_data) if re.search(feconf.USER_ID_REGEX, user_data_json_string): logging.error( '[TAKEOUT] User ID found in the JSON generated for user %s' % self.user_id) user_data_json_string = ( 'There was an error while exporting ' + 'data. Please contact %s to export your data.' % feconf.ADMIN_EMAIL_ADDRESS) user_images = [] # Create zip file. temp_file = io.BytesIO() with zipfile.ZipFile( temp_file, mode='w', compression=zipfile.ZIP_DEFLATED ) as zfile: zfile.writestr('oppia_takeout_data.json', user_data_json_string) for image in user_images: decoded_png = utils.convert_png_data_url_to_binary( image.b64_image_data) zfile.writestr('images/' + image.image_export_path, decoded_png) # Render file for download. self.render_downloadable_file( temp_file, 'oppia_takeout_data.zip', 'text/plain')
def test_convert_png_data_url_to_binary(self) -> None: image_data_url = '%s%s' % (utils.PNG_DATA_URL_PREFIX, python_utils.url_quote( base64.b64encode(b'test123')) ) # type: ignore[no-untyped-call] self.assertEqual(utils.convert_png_data_url_to_binary(image_data_url), b'test123')
def test_convert_png_data_url_to_binary_with_incorrect_prefix( self) -> None: with self.assertRaisesRegexp( # type: ignore[no-untyped-call] Exception, 'The given string does not represent a PNG data URL'): utils.convert_png_data_url_to_binary('data:image/jpg;base64,')