From 7a0a282cf0bffa9aaf272b78c94b54dd63b3525c Mon Sep 17 00:00:00 2001 From: Christophe Boulanger Date: Tue, 27 Apr 2021 10:36:03 +0200 Subject: [PATCH] Rename and adapt some imports for Plone6 --- src/collective/messagesviewlet/__init__.py | 2 +- .../browser/messagesviewlet.py | 4 +-- src/collective/messagesviewlet/message.py | 10 +++---- .../profiles/testing/metadata.xml | 6 +++++ .../messagesviewlet/setuphandlers.py | 4 +-- src/collective/messagesviewlet/testing.py | 14 +++++----- .../messagesviewlet/tests/test_message.py | 9 +++---- .../messagesviewlet/tests/test_setup.py | 27 +++++++++++++++---- src/collective/messagesviewlet/utils.py | 9 ++++--- 9 files changed, 55 insertions(+), 30 deletions(-) create mode 100644 src/collective/messagesviewlet/profiles/testing/metadata.xml diff --git a/src/collective/messagesviewlet/__init__.py b/src/collective/messagesviewlet/__init__.py index f402108..c961d8a 100644 --- a/src/collective/messagesviewlet/__init__.py +++ b/src/collective/messagesviewlet/__init__.py @@ -9,7 +9,7 @@ _ = MessageFactory('collective.messagesviewlet') -HAS_PLONE_5 = api.env.plone_version().startswith('5') +HAS_PLONE_5_AND_MORE = api.env.plone_version().startswith('5') or api.env.plone_version().startswith('6') try: api.env.get_distribution('plone.app.event') diff --git a/src/collective/messagesviewlet/browser/messagesviewlet.py b/src/collective/messagesviewlet/browser/messagesviewlet.py index 22b964c..ee8a705 100644 --- a/src/collective/messagesviewlet/browser/messagesviewlet.py +++ b/src/collective/messagesviewlet/browser/messagesviewlet.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from collective.messagesviewlet import HAS_PLONE_5 +from collective.messagesviewlet import HAS_PLONE_5_AND_MORE from collective.messagesviewlet.utils import get_messages_to_show from plone.app.layout.viewlets import common from plone.registry.interfaces import IRegistry @@ -12,7 +12,7 @@ class MessagesViewletBase(common.ViewletBase): location_filter = [] def is_plone_5(self): - return HAS_PLONE_5 + return HAS_PLONE_5_AND_MORE def getAllMessages(self): messages = get_messages_to_show(self.context) diff --git a/src/collective/messagesviewlet/message.py b/src/collective/messagesviewlet/message.py index 872b306..ab82b61 100644 --- a/src/collective/messagesviewlet/message.py +++ b/src/collective/messagesviewlet/message.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from collective.messagesviewlet import _ from collective.messagesviewlet import HAS_PAE -from collective.messagesviewlet import HAS_PLONE_5 +from collective.messagesviewlet import HAS_PLONE_5_AND_MORE from DateTime import DateTime from plone import api from plone.app.layout.navigation.interfaces import INavigationRoot @@ -28,7 +28,7 @@ from plone.app.event.base import default_timezone from plone.app.event.base import localized_now -if not HAS_PLONE_5: +if not HAS_PLONE_5_AND_MORE: from plone.formwidget.datetime.z3cform.widget import DatetimeFieldWidget as dtfw4 @@ -102,7 +102,7 @@ class IMessage(model.Schema): description=_(u"Specify start date message appearance"), defaultFactory=default_start, ) - if HAS_PLONE_5: + if HAS_PLONE_5_AND_MORE: form.widget("start", dtfw5, default_timezone=default_timezone) else: form.widget("start", dtfw4) @@ -115,7 +115,7 @@ class IMessage(model.Schema): "If you pick a date, dont't forget hours !" ), ) - if HAS_PLONE_5: + if HAS_PLONE_5_AND_MORE: form.widget("end", dtfw5, default_timezone=default_timezone) else: form.widget("end", dtfw4) @@ -154,7 +154,7 @@ def validateStartEnd(data): def add_timezone(dt, force=False): if HAS_PAE: TZ = default_timezone(as_tzinfo=True) - if force or (not HAS_PLONE_5 and not dt.tzinfo): + if force or (not HAS_PLONE_5_AND_MORE and not dt.tzinfo): return TZ.localize(dt) return dt diff --git a/src/collective/messagesviewlet/profiles/testing/metadata.xml b/src/collective/messagesviewlet/profiles/testing/metadata.xml new file mode 100644 index 0000000..723252c --- /dev/null +++ b/src/collective/messagesviewlet/profiles/testing/metadata.xml @@ -0,0 +1,6 @@ + + + + profile-collective.messagesviewlet:default + + diff --git a/src/collective/messagesviewlet/setuphandlers.py b/src/collective/messagesviewlet/setuphandlers.py index dfadb0f..e305f04 100644 --- a/src/collective/messagesviewlet/setuphandlers.py +++ b/src/collective/messagesviewlet/setuphandlers.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from collective.messagesviewlet import HAS_PLONE_5 +from collective.messagesviewlet import HAS_PLONE_5_AND_MORE from plone import api from plone.app.dexterity.behaviors.exclfromnav import IExcludeFromNavigation from Products.CMFPlone import interfaces as Plone @@ -43,7 +43,7 @@ def add_default_messages(context): if context.readDataFile('collectivemessagesviewlet_messages.txt') is None: return resource = 'resource' - if HAS_PLONE_5: + if HAS_PLONE_5_AND_MORE: resource = 'plone' site = api.portal.get() add_message('maintenance-soon', _('maintenance_soon_tit', context=site), _('maintenance_soon_txt', context=site), diff --git a/src/collective/messagesviewlet/testing.py b/src/collective/messagesviewlet/testing.py index cb2964a..a8f0c57 100644 --- a/src/collective/messagesviewlet/testing.py +++ b/src/collective/messagesviewlet/testing.py @@ -1,19 +1,17 @@ # -*- coding: utf-8 -*- +from collective.messagesviewlet import HAS_PLONE_5_AND_MORE from plone import api +from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE from plone.app.robotframework.testing import REMOTE_LIBRARY_BUNDLE_FIXTURE from plone.app.testing import applyProfile from plone.app.testing import FunctionalTesting from plone.app.testing import IntegrationTesting -from plone.app.contenttypes.testing import PLONE_APP_CONTENTTYPES_FIXTURE from plone.app.testing import PloneSandboxLayer from plone.testing import z2 import collective.messagesviewlet -IS_PLONE_5 = api.env.plone_version().startswith('5') - - class CollectiveMessagesviewletLayer(PloneSandboxLayer): defaultBases = (PLONE_APP_CONTENTTYPES_FIXTURE,) @@ -22,9 +20,11 @@ def setUpZope(self, app, configurationContext): self.loadZCML(package=collective.messagesviewlet, name='testing.zcml') def setUpPloneSite(self, portal): - installer = portal['portal_quickinstaller'] - installer.installProduct('collective.messagesviewlet') - applyProfile(portal, 'collective.messagesviewlet:default') + if not HAS_PLONE_5_AND_MORE: + installer = portal['portal_quickinstaller'] + installer.installProduct('collective.messagesviewlet') + else: + applyProfile(portal, 'collective.messagesviewlet:testing') api.user.create(email='test@imio.be', username='test') api.user.grant_roles(username='test', roles=['Site Administrator']) diff --git a/src/collective/messagesviewlet/tests/test_message.py b/src/collective/messagesviewlet/tests/test_message.py index f954284..6ec0a4a 100644 --- a/src/collective/messagesviewlet/tests/test_message.py +++ b/src/collective/messagesviewlet/tests/test_message.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- +from collective.messagesviewlet import HAS_PLONE_5_AND_MORE from collective.messagesviewlet.browser.messagesviewlet import GlobalMessagesViewlet from collective.messagesviewlet.message import add_timezone from collective.messagesviewlet.message import IMessage @@ -8,7 +9,6 @@ from collective.messagesviewlet.testing import ( COLLECTIVE_MESSAGESVIEWLET_INTEGRATION_TESTING, ) # noqa -from collective.messagesviewlet.testing import IS_PLONE_5 from collective.messagesviewlet.utils import add_message from dateutil.relativedelta import relativedelta from datetime import datetime @@ -63,7 +63,6 @@ def setUp(self): # The products build the "special" folder "messages-config" to store messages. self.message_config_folder = self.portal["messages-config"] setRoles(self.portal, TEST_USER_ID, ["Manager"]) - self.installer = api.portal.get_tool("portal_quickinstaller") self.wftool = self.portal.portal_workflow self.messages = [] # Create some messages @@ -113,7 +112,7 @@ def setUp(self): self.messages.append(message) def tearDown(self): - self._changeUser("admin") + self._changeUser("test") api.content.delete(obj=self.another_folder) messages = api.content.find( context=self.message_config_folder, portal_type="Message" @@ -264,7 +263,7 @@ def test_viewlet_rendering(self): """ viewlet = self.get_global_viewlet(self.portal) self.assertIn(self.messages[0].text.output, viewlet.render()) - if not IS_PLONE_5: + if not HAS_PLONE_5_AND_MORE: self.assertIn("messagesviewlet-info", viewlet.render()) else: self.assertIn("portalMessage info", viewlet.render()) @@ -364,7 +363,7 @@ def test_local_messages_location(self): # To get this location message (justhere), we must be in a folder context = self.portal["myfolder"] locations = [term.token for term in location(context)._terms] - self.assertEquals(locations, ["justhere", "fromhere"]) + self.assertEqual(locations, ["justhere", "fromhere"]) def test_local_messages_viewlet_render(self): api.portal.set_registry_record("messagesviewlet.authorize_local_message", True) diff --git a/src/collective/messagesviewlet/tests/test_setup.py b/src/collective/messagesviewlet/tests/test_setup.py index e7a148d..2a180dc 100644 --- a/src/collective/messagesviewlet/tests/test_setup.py +++ b/src/collective/messagesviewlet/tests/test_setup.py @@ -1,8 +1,12 @@ # -*- coding: utf-8 -*- """Setup tests for this package.""" +from collective.messagesviewlet import HAS_PLONE_5_AND_MORE from collective.messagesviewlet.testing import COLLECTIVE_MESSAGESVIEWLET_INTEGRATION_TESTING # noqa from plone import api +if HAS_PLONE_5_AND_MORE: + from Products.CMFPlone.utils import get_installer + import unittest @@ -14,11 +18,17 @@ class TestSetup(unittest.TestCase): def setUp(self): """Custom shared utility setup for tests.""" self.portal = self.layer['portal'] - self.installer = api.portal.get_tool('portal_quickinstaller') + if not HAS_PLONE_5_AND_MORE: + self.installer = api.portal.get_tool('portal_quickinstaller') + else: + self.installer = get_installer(self.portal, self.layer["request"]) def test_product_installed(self): """Test if collective.messagesviewlet is installed with portal_quickinstaller.""" - self.assertTrue(self.installer.isProductInstalled('collective.messagesviewlet')) + if not HAS_PLONE_5_AND_MORE: + self.assertTrue(self.installer.isProductInstalled('collective.messagesviewlet')) + else: + self.assertTrue(self.installer.is_product_installed('collective.messagesviewlet')) def test_browserlayer(self): """Test that ICollectiveMessagesviewletLayer is registered.""" @@ -33,9 +43,16 @@ class TestUninstall(unittest.TestCase): def setUp(self): self.portal = self.layer['portal'] - self.installer = api.portal.get_tool('portal_quickinstaller') - self.installer.uninstallProducts(['collective.messagesviewlet']) + if not HAS_PLONE_5_AND_MORE: + self.installer = api.portal.get_tool('portal_quickinstaller') + self.installer.uninstallProducts(['collective.messagesviewlet']) + else: + self.installer = get_installer(self.portal, self.layer["request"]) + self.installer.uninstall_product('collective.messagesviewlet') def test_product_uninstalled(self): """Test if collective.messagesviewlet is cleanly uninstalled.""" - self.assertFalse(self.installer.isProductInstalled('collective.messagesviewlet')) + if not HAS_PLONE_5_AND_MORE: + self.assertFalse(self.installer.isProductInstalled('collective.messagesviewlet')) + else: + self.assertFalse(self.installer.is_product_installed('collective.messagesviewlet')) diff --git a/src/collective/messagesviewlet/utils.py b/src/collective/messagesviewlet/utils.py index b22976f..a8fef6d 100644 --- a/src/collective/messagesviewlet/utils.py +++ b/src/collective/messagesviewlet/utils.py @@ -1,12 +1,15 @@ # -*- coding: utf-8 -*- from collective.behavior.talcondition.behavior import ITALCondition -from collective.messagesviewlet import HAS_PLONE_5 +from collective.messagesviewlet import HAS_PLONE_5_AND_MORE from collective.messagesviewlet.message import add_timezone from collective.messagesviewlet.message import generate_uid from datetime import datetime from plone import api -from plone.app.layout.navigation.defaultpage import isDefaultPage +try: + from plone.app.layout.navigation.defaultpage import isDefaultPage +except ImportError as error: + from Products.CMFPlone.defaultpage import is_default_page as isDefaultPage from plone.app.layout.navigation.interfaces import INavigationRoot from plone.app.textfield.value import RichTextValue from six import text_type @@ -45,7 +48,7 @@ def add_message(id, title, text, msg_type='info', can_hide=False, start=datetime return None rich_text = _richtextval(text) # Add TZ when using Plone5 - if HAS_PLONE_5: + if HAS_PLONE_5_AND_MORE: start = add_timezone(start, force=True) try: end_date = datetime.strptime(end, '%Y%m%d-%H%M')