def testThemeSpecificLayerTakesHighestPrecedence(self): register_layer(IAdditiveLayer, 'Plone.testlayer') iro = self._get_request_interfaces() unregister_layer('Plone.testlayer') self.failUnless(iro.index(IThemeSpecific) < iro.index(IAdditiveLayer), 'Theme-specific browser layers should take precedence over other browser layers.')
def setUp(cls): """Set up additional products and ZCML required to test this product. """ #ztc.installProduct('RichDocument') ztc.installProduct('LinguaPlone') ztc.installProduct('PlacelessTranslationService') ztc.installPackage('slc.linguatools') ptc.setupPloneSite(products=[ 'LinguaPlone', 'slc.linguatools', 'Products.RichDocument', ]) # Load the ZCML configuration for this package and its dependencies # register the Browserlayer from slc.linguatools, so that our # schema-extensions using IBrowserLayerAwareExtender work browserlayerutils.register_layer(ILinguaToolsLayer, name='slc.linguatools') fiveconfigure.debug_mode = True import slc.linguatools import Products.LinguaPlone zcml.load_config('configure.zcml', slc.linguatools) import Products.LinguaPlone zcml.load_config('configure.zcml', Products.LinguaPlone) fiveconfigure.debug_mode = False SiteLayer.setUp()
def test_remove_broken_browserlayer(self): from plone.browserlayer.utils import registered_layers from plone.browserlayer.interfaces import ILocalBrowserLayerType register_layer(IMyProductLayer, 'my.product') class Step(UpgradeStep): def __call__(self): self.remove_broken_browserlayer('my.product', 'IMyProductLayer') Step(self.portal_setup) # Check that it worked. Note that this check fails if you have called # registered_layers earlier in this test before calling # remove_broken_browserlayer: the previous answer is cached. self.assertFalse(IMyProductLayer in registered_layers()) # Check it a bit more low level. sm = self.portal.getSiteManager() adapters = sm.utilities._adapters self.assertFalse('my.product' in adapters[0][ILocalBrowserLayerType]) subscribers = sm.utilities._subscribers layer_subscribers = subscribers[0][ILocalBrowserLayerType] iface_name = 'IMyProductLayer' self.assertEqual( len([ layer for layer in layer_subscribers[''] if layer.__name__ == iface_name ]), 0) self.assertNotIn((ILocalBrowserLayerType, 'my.product'), sm._utility_registrations)
def testCustomBrowserLayerHasPrecedenceOverDefaultLayer(self): register_layer(IAdditiveLayer, 'Plone.testlayer') iro = self._get_request_interfaces() unregister_layer('Plone.testlayer') self.assertTrue(iro.index(IAdditiveLayer) < iro.index(IDefaultBrowserLayer))
def migrateTo031(context): """Add new custom browserlayer.""" if not IPrettyPhotoSpecific in layerutils.registered_layers(): layerutils.register_layer(IPrettyPhotoSpecific, name='collective.prettyphoto') logger.info('Browser layer "collective.prettyphoto" installed.')
def testCustomBrowserLayerHasPrecedenceOverDefaultLayer(self): register_layer(IAdditiveLayer, 'Plone.testlayer') iro = self._get_request_interfaces() unregister_layer('Plone.testlayer') self.assertTrue( iro.index(IAdditiveLayer) < iro.index(IDefaultBrowserLayer))
def testThemeSpecificLayerTakesHighestPrecedence(self): register_layer(IAdditiveLayer, 'Plone.testlayer') iro = self._get_request_interfaces() unregister_layer('Plone.testlayer') self.assertTrue(iro.index(IThemeSpecific) < iro.index(IAdditiveLayer), 'Theme-specific browser layers should take precedence over other ' 'browser layers.')
def registerDiscussionLayer(context): """ Register browser layer for extending discussion with quintagroup captcha """ from quintagroup.plonecaptchas.interfaces import IQGDiscussionCaptchas from plone.browserlayer.utils import register_layer name = "QGCaptchaDiscussionLayer" site = getSiteManager(context) register_layer(IQGDiscussionCaptchas, name, site_manager=site)
def _initLayers(self, node): for child in node.childNodes: if child.nodeName.lower() == 'layer': name = child.getAttribute('name') if child.getAttribute('remove'): unregister_layer(name, site_manager=self.context) continue interface = _resolveDottedName(child.getAttribute('interface')) register_layer(interface, name, site_manager=self.context)
def test_remove_broken_browserlayer(self): # TODO: Currently, this test doesn't really test that the removal # works, it only checks that the Step method can be called without # causing problems. register_layer(IMyProductLayer, 'my.product') class Step(UpgradeStep): def __call__(self): self.remove_broken_browserlayer('my.product', 'IMyProductLayer') Step(self.portal_setup)
def _initLayers(self, node): for child in node.childNodes: if child.nodeName.lower() == 'layer': name = child.getAttribute('name') if child.getAttribute('remove'): try: unregister_layer(name, site_manager=self.context) except KeyError as e: self._logger.info(e) continue interface = _resolveDottedName(child.getAttribute('interface')) register_layer(interface, name, site_manager=self.context)
def setUp(cls): """ """ fiveconfigure.debug_mode = True import slc.calendarfetcher zcml.load_config('configure.zcml', slc.calendarfetcher) fiveconfigure.debug_mode = False ztc.installPackage('slc.calendarfetcher') browserlayerutils.register_layer( ICalendarFetcherLayer, name='slc.calendarfetcher' ) PloneSite.setUp()
def migrate_to_1003(context): """Migrate from 1002 to 1003. * Add plone.mls.listing browser layer. * Register custom stylesheet. """ if IListingSpecific not in layerutils.registered_layers(): layerutils.register_layer(IListingSpecific, name='plone.mls.listing') portal_css = api.portal.get_tool(name='portal_css') stylesheet_id = '++resource++plone.mls.listing.stylesheets/main.css' portal_css.registerStylesheet(stylesheet_id, media='screen')
def afterSetUp(self): super(JsonClientTestCase, self).afterSetUp() register_layer(IPMR2JsonClientTestLayer, 'pmr2.jsonclient.tests') request = TestRequest() # Ensure that the most basic scope managers are being used. cmf = factory(ConsumerManager) tmf = factory(TokenManager) smf = factory(MockScopeManager) zope.component.provideAdapter(cmf, ( IAnnotatable, IPMR2JsonClientTestLayer, ), IConsumerManager) zope.component.provideAdapter(tmf, ( IAnnotatable, IPMR2JsonClientTestLayer, ), ITokenManager) zope.component.provideAdapter(smf, ( IAnnotatable, IPMR2JsonClientTestLayer, ), IScopeManager) # assuming none of these are overridden. self.consumer = Consumer('test.example.com', 'consumer-secret', u'PMR2 Test JSON Client', None) cm = zope.component.getMultiAdapter((self.portal, request), IConsumerManager) cm.add(self.consumer) token = Token('pmr2token', 'token-secret') token.access = True token.consumer_key = self.consumer.key token.user = default_user self.token = token tm = zope.component.getMultiAdapter((self.portal, request), ITokenManager) tm.add(self.token) # XXX especially this one. sm = zope.component.getMultiAdapter((self.portal, request), IScopeManager) sm.permitted = '^.*$' # permit everything. b = Browser() portal_url = self.portal.absolute_url() b.open(portal_url + '/login') b.getControl(name='__ac_name').value = default_user b.getControl(name='__ac_password').value = default_password b.getControl(name='submit').click() self.user_browser = b
def setUpPloneSite(self, portal): # Needed to get the workflows applyProfile(portal, 'Products.CMFPlone:plone') applyProfile(portal, 'slc.seminarportal:default') # Login as manager and create a test folder setRoles(portal, TEST_USER_ID, ['Manager']) login(portal, TEST_USER_NAME) portal.invokeFactory('Folder', 'folder') browserlayerutils.register_layer(IThemeLayer, name="slc.seminarportal.browserlayer")
def migrate_to_1003(context): """Migrate from 1002 to 1003. * Add plone.mls.listing browser layer. * Register custom stylesheet. """ site = getUtility(IPloneSiteRoot) if IListingSpecific not in layerutils.registered_layers(): layerutils.register_layer(IListingSpecific, name='plone.mls.listing') portal_css = getToolByName(site, 'portal_css') stylesheet_id = '++resource++plone.mls.listing.stylesheets/main.css' portal_css.registerStylesheet(stylesheet_id, media='screen')
def migrateTo021(context): """Add new custom browserlayer.""" if not IATMediaPageSpecific in layerutils.registered_layers(): layerutils.register_layer(IATMediaPageSpecific, name='Products.ATMediaPage') logger.info('Browser layer "Products.ATMediaPage" installed.') site = getUtility(IPloneSiteRoot) # skip kupu configuration on sites that don't have kupu installed kupu = getToolByName(site, 'kupu_library_tool', None) if kupu is not None: configureKupu(kupu) logger.info('Kupu configured for Products.ATMediaPage')
def setUpPloneSite(self, portal): # Needed to get the workflows applyProfile(portal, 'Products.CMFPlone:plone') applyProfile(portal, 'slc.seminarportal:default') # Login as manager and create a test folder setRoles(portal, TEST_USER_ID, ['Manager']) login(portal, TEST_USER_NAME) portal.invokeFactory('Folder', 'folder') browserlayerutils.register_layer( IThemeLayer, name="slc.seminarportal.browserlayer" )
def test_childsite_browserlayer(self): """ Child sites can have their own browser layer. """ utils.enable_childsite(self.childsite) layer_utils.register_layer(IChildSiteLayer, 'collective.lineage.childsite.layer', site_manager=component.getSiteManager( (self.childsite))) self.assertFalse( IChildSiteLayer.providedBy(self.portal.REQUEST), 'Child site browser layer applied prior to traversing') self.portal.REQUEST.traverse('/'.join( self.childsite.getPhysicalPath())) self.assertTrue(IChildSiteLayer.providedBy(self.portal.REQUEST), 'Child site browser layer not applied to the request')
def test_childsite_browserlayer(self): """ Child sites can have their own browser layer. """ utils.enable_childsite(self.childsite) layer_utils.register_layer( IChildSiteLayer, 'collective.lineage.childsite.layer', site_manager=component.getSiteManager((self.childsite))) self.assertFalse( IChildSiteLayer.providedBy(self.portal.REQUEST), 'Child site browser layer applied prior to traversing') self.portal.REQUEST.traverse( '/'.join(self.childsite.getPhysicalPath())) self.assertTrue( IChildSiteLayer.providedBy(self.portal.REQUEST), 'Child site browser layer not applied to the request')
def afterSetUp(self): super(JsonClientTestCase, self).afterSetUp() register_layer(IPMR2JsonClientTestLayer, "pmr2.jsonclient.tests") request = TestRequest() # Ensure that the most basic scope managers are being used. cmf = factory(ConsumerManager) tmf = factory(TokenManager) smf = factory(MockScopeManager) zope.component.provideAdapter(cmf, (IAnnotatable, IPMR2JsonClientTestLayer), IConsumerManager) zope.component.provideAdapter(tmf, (IAnnotatable, IPMR2JsonClientTestLayer), ITokenManager) zope.component.provideAdapter(smf, (IAnnotatable, IPMR2JsonClientTestLayer), IScopeManager) # assuming none of these are overridden. self.consumer = Consumer("test.example.com", "consumer-secret", u"PMR2 Test JSON Client", None) cm = zope.component.getMultiAdapter((self.portal, request), IConsumerManager) cm.add(self.consumer) token = Token("pmr2token", "token-secret") token.access = True token.consumer_key = self.consumer.key token.user = default_user self.token = token tm = zope.component.getMultiAdapter((self.portal, request), ITokenManager) tm.add(self.token) # XXX especially this one. sm = zope.component.getMultiAdapter((self.portal, request), IScopeManager) sm.permitted = "^.*$" # permit everything. b = Browser() portal_url = self.portal.absolute_url() b.open(portal_url + "/login") b.getControl(name="__ac_name").value = default_user b.getControl(name="__ac_password").value = default_password b.getControl(name="submit").click() self.user_browser = b
def setUp(self): super(DocTestCase, self).setUp() register_layer(IPMR2TestRequest, 'pmr2.z3cform.tests')
def install(self): out=StringIO() Layers = [] mtool = getToolByName(self, 'portal_migration') plone_version = mtool.getFileSystemVersion() if plone_version.startswith('2.1'): plone_version = '2.1' elif plone_version.startswith('2.0'): plone_version = '2.0.5' elif plone_version.startswith('2.5') or plone_version.startswith('3.0'): plone_version = '2.5' else: raise Exception("Error - Unsupported version. Suported versions: Plone 2.0.5-3.0") product_path = package_home(GLOBALS) versioned_skin = path_join(product_path, 'skins', PROJECTNAME, plone_version) Layers.append(SKIN_NAME) Layers.append('%s/%s' % (SKIN_NAME, plone_version) ) out.write('Call setupSkin... \n') setupSkin(self, out, Layers) # register our browser layer register_layer(IPloneCommentsLayer, name='qPloneComments') # add Property sheet to portal_properies pp = getToolByName(self, 'portal_properties') if not 'qPloneComments' in pp.objectIds(): pp.addPropertySheet(id='qPloneComments', title= '%s Properties' % 'qPloneComments') out.write("Adding %s property sheet to portal_properies\n" % 'qPloneComments' ) props_sheet = pp['qPloneComments'] updateProperties(props_sheet, out, PROPERTIES) # Tern on Anonymous commenting self.manage_permission(ReplyToItem, ['Anonymous','Manager','Member'], 1) out.write("Updating properties of %s property sheet\n" % 'qPloneComments' ) # Add Configlet. Delete old version before adding, if exist one. controlpanel_tool = getToolByName(self, 'portal_controlpanel') controlpanel_tool.unregisterConfiglet(CONFIGLET_ID) controlpanel_tool.registerConfiglet(id=CONFIGLET_ID, name=CONFIGLET_NAME, category='Products', action='string:${portal_url}/%s' % CONFIGLET_ID, appId=PROJECTNAME, permission=ManagePortal, imageUrl='group.gif') # Add DiscussionManager role to Portal if plone_version == '2.5': uf = getToolByName(self, 'acl_users') rmanager = uf.portal_role_manager existing = rmanager.listRoleIds() if not 'DiscussionManager' in existing: rmanager.addRole('DiscussionManager') out.write("Added DiscussionManager role top portal.\n") else: roles = list(self.__ac_roles__) if not 'DiscussionManager' in roles: roles.append('DiscussionManager') roles = tuple(roles) self.__ac_roles__ = roles out.write("Added DiscussionManager role top portal.\n") self.manage_permission('Moderate Discussion', ['DiscussionManager', 'Manager']) # Add 'DiscussionManagers' group gtool = getToolByName(self, 'portal_groups') existing = gtool.listGroupIds() if not 'DiscussionManager' in existing: gtool.addGroup('DiscussionManager', roles=['DiscussionManager']) out.write("Added DiscussionManager group to portal_groups with DiscussionManager role.\n") # Remove workflow-chain for Discussion Item wf_tool = getToolByName(self, 'portal_workflow') wf_tool.setChainForPortalTypes( ('Discussion Item',), []) out.write("Removed workflow chain for Discussion Item type.\n") out.write('Installation successfully completed.\n') return out.getvalue()
def _initLayers(self, node): for child in node.childNodes: if child.nodeName.lower() == "layer": name = child.getAttribute("name") interface = _resolveDottedName(child.getAttribute("interface")) register_layer(interface, name, site_manager=self.context)