From cc5441eb267280ccb79586db030255e76190c9b1 Mon Sep 17 00:00:00 2001 From: Kazuhiko SHIOZAKI <kazuhiko@nexedi.com> Date: Thu, 13 Oct 2022 10:38:05 +0200 Subject: [PATCH] py2/py3: str.decode('base64') and bytes.encode('base64') don't exist in Python 3. --- .../portal_components/module.erp5.ImageUtil.py | 4 +++- .../RequirementDocument_viewDetailedReportAsOdt.oot | 2 +- .../portal_components/test.erp5.testRunMyDoc.py | 3 ++- .../portal_skins/erp5_hr_record/ERP5Site_migrateData.py | 3 ++- .../erp5_hr_record/ExpenseRecord_updateRelatedTicket.py | 3 ++- .../portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py | 3 ++- product/ERP5/tests/testBusinessTemplateTwoFileExport.py | 5 +++-- product/ERP5Form/GadgetField.py | 3 ++- 8 files changed, 17 insertions(+), 9 deletions(-) diff --git a/bt5/erp5_base/ModuleComponentTemplateItem/portal_components/module.erp5.ImageUtil.py b/bt5/erp5_base/ModuleComponentTemplateItem/portal_components/module.erp5.ImageUtil.py index 59a2916c25..4959af846e 100644 --- a/bt5/erp5_base/ModuleComponentTemplateItem/portal_components/module.erp5.ImageUtil.py +++ b/bt5/erp5_base/ModuleComponentTemplateItem/portal_components/module.erp5.ImageUtil.py @@ -29,6 +29,8 @@ import urllib2 from lxml import etree from erp5.component.document.Document import ConversionError +import base64 +from Products.ERP5Type.Utils import bytes2str SVG_DEFAULT_NAMESPACE = "http://www.w3.org/2000/svg" @@ -38,7 +40,7 @@ def getDataURI(url): except Exception as e: raise ConversionError("Error to transform url (%s) into data uri. ERROR = %s" % (url, Exception(e))) return 'data:%s;base64,%s' % (data.info()["content-type"], - data.read().encode("base64").replace('\n', "")) + bytes2str(base64.b64encode(data.read())).replace('\n', "")) def transformUrlToDataURI(content): if content is None or len(content) == 0: diff --git a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/RequirementDocument_viewDetailedReportAsOdt.oot b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/RequirementDocument_viewDetailedReportAsOdt.oot index b0364182ee..8b0998488d 100644 --- a/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/RequirementDocument_viewDetailedReportAsOdt.oot +++ b/bt5/erp5_project/SkinTemplateItem/portal_skins/erp5_project/RequirementDocument_viewDetailedReportAsOdt.oot @@ -104,7 +104,7 @@ <draw:frame draw:style-name="fr1" draw:name="Image1" text:anchor-type="as-char" svg:width="3in" draw:z-index="0" tal:attributes="draw:name python:'embedded_erp5_image_%s' % image.getId(); svg:height python: '%1.1fin' % (3.0 * image.getHeight() / (image.getWidth() or 1.0))"> - <draw:image><office:binary-data tal:content="python:str(image.convert(format='png')[1]).encode('base64')" /></draw:image> + <draw:image><office:binary-data tal:content="python:modules['base64'].b64encode(image.convert(format='png')[1])" /></draw:image> </draw:frame> </text:p> </tal:block> diff --git a/bt5/erp5_run_my_doc/TestTemplateItem/portal_components/test.erp5.testRunMyDoc.py b/bt5/erp5_run_my_doc/TestTemplateItem/portal_components/test.erp5.testRunMyDoc.py index 3a5bb3cc57..bafda3c200 100644 --- a/bt5/erp5_run_my_doc/TestTemplateItem/portal_components/test.erp5.testRunMyDoc.py +++ b/bt5/erp5_run_my_doc/TestTemplateItem/portal_components/test.erp5.testRunMyDoc.py @@ -29,6 +29,7 @@ from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from erp5.component.test.testDms import makeFileUpload from time import time +import base64 class TestRunMyDoc(ERP5TypeTestCase): """ @@ -132,7 +133,7 @@ class TestRunMyDoc(ERP5TypeTestCase): self.tic() # The right image were updated. image_upload.seek(0) - self.assertEqual(image_page_2.getData(), image_upload.read().decode("base64")) + self.assertEqual(image_page_2.getData(), base64.b64decode(image_upload.read())) self.assertEqual(image_page_2.getFilename(), image_reference + '.png') self.assertEqual(image_page.getData(), '') diff --git a/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ERP5Site_migrateData.py b/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ERP5Site_migrateData.py index ab067168a4..22773ccda2 100644 --- a/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ERP5Site_migrateData.py +++ b/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ERP5Site_migrateData.py @@ -1,3 +1,4 @@ +import base64 portal = context.getPortalObject() # Update Photos @@ -9,7 +10,7 @@ for record in portal.expense_record_module.objectValues(portal_type="Expense Rec if ticket.getReference(): photo_data = photo_data.split(",")[1] image = portal.portal_contributions.newContent( - data = photo_data.decode('base64'), + data = base64.b64decode(photo_data), reference=ticket.getReference()+ "-justificatif", title = ticket.getReference() + " Justificatif", description = ticket.getDescription(), diff --git a/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ExpenseRecord_updateRelatedTicket.py b/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ExpenseRecord_updateRelatedTicket.py index c915034b0f..3b07ab5f6d 100644 --- a/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ExpenseRecord_updateRelatedTicket.py +++ b/bt5/erp5_travel_expense/SkinTemplateItem/portal_skins/erp5_hr_record/ExpenseRecord_updateRelatedTicket.py @@ -1,3 +1,4 @@ +import base64 import json portal = context.getPortalObject() record = context @@ -80,7 +81,7 @@ if photo_data: if "application/pdf" in photo_type: filename="tmp.pdf" image = portal.portal_contributions.newContent( - data = photo_data.decode('base64'), + data = base64.b64decode(photo_data), reference=ticket.getReference()+ "-justificatif", title = ticket.getReference() + " Justificatif", description = ticket.getDescription(), diff --git a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py index 63a0d64ab3..9e5146c40f 100644 --- a/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py +++ b/bt5/erp5_ui_test_core/SkinTemplateItem/portal_skins/erp5_ui_test_core/Zuite_uploadScreenshot.py @@ -1,6 +1,7 @@ """ Upload a screenshot taken by the test to ERP5 """ +import base64 data_uri = context.REQUEST.form.get('data_uri', 'default') image_module = getattr(context, "image_module", None) @@ -16,7 +17,7 @@ if image is None or image.getPortalType() != "Image": image.setContentType('image/png') data_text = data_uri.read() -data = data_text.decode('base64') +data = base64.b64decode(data_text) image.edit(data=data, filename=str(image_reference) + '.png', diff --git a/product/ERP5/tests/testBusinessTemplateTwoFileExport.py b/product/ERP5/tests/testBusinessTemplateTwoFileExport.py index c82d02068c..063a4fc5bb 100644 --- a/product/ERP5/tests/testBusinessTemplateTwoFileExport.py +++ b/product/ERP5/tests/testBusinessTemplateTwoFileExport.py @@ -30,6 +30,7 @@ from Products.ERP5Type.tests.ERP5TypeTestCase import \ ERP5TypeTestCase, immediateCompilation from Products.PageTemplates.ZopePageTemplate import ZopePageTemplate from runUnitTest import tests_home +import base64 import glob import shutil import os @@ -280,9 +281,9 @@ class TestBusinessTemplateTwoFileExport(ERP5TypeTestCase): self.assertEqual(image_page.getProperty(property_id), property_value) - png_data = """iVBORw0KGgoAAAANSUhEUgAAAAUA + png_data = base64.b64decode(b"""iVBORw0KGgoAAAANSUhEUgAAAAUA AAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO -9TXL0Y4OHwAAAABJRU5ErkJggg==""".decode("base64") +9TXL0Y4OHwAAAABJRU5ErkJggg==""") def test_twoFileImportExportForImageIdentifyingTypeByContent(self): """ diff --git a/product/ERP5Form/GadgetField.py b/product/ERP5Form/GadgetField.py index 1ea9856872..f2d5285a4f 100644 --- a/product/ERP5Form/GadgetField.py +++ b/product/ERP5Form/GadgetField.py @@ -7,6 +7,7 @@ from six.moves import cStringIO as StringIO from json import dumps from Acquisition import aq_base from six.moves.urllib.parse import urljoin +import base64 class GadgetWidget(Widget.Widget): """ @@ -150,7 +151,7 @@ class GadgetFieldValidator(Validator.Validator): if value is not None: if field.get_value('data_url'): value=value.split(",")[1] - return StringIO(value.decode('base64')) + return StringIO(base64.b64decode(value)) return value -- 2.30.9