def test_nestedSitesDontConflictButStillAcquire(self): # let's register a dummy utility in the dummy site dummy = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, dummy) # let's also create a subsite and make that our site manage_addDummySite(self.folder.site, 'subsite') enableLocalSiteHook(self.folder.site.subsite) setSite(self.folder.site.subsite) # we should still be able to lookup the original utility from # the site one level above self.assertEqual(zapi.getUtility(IDummyUtility), dummy) # now we register a dummy utility in the subsite and see that # its registration doesn't conflict subdummy = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, subdummy) # when we look it up we get the more local one now because the # more local one shadows the less local one self.assertEqual(zapi.getUtility(IDummyUtility), subdummy) # getAllUtilitiesFor gives us both the more local and the less # local utility (XXX not sure if this is the right semantics # for getAllUtilitiesFor) self.assertEqual(sets.Set(zapi.getAllUtilitiesRegisteredFor(IDummyUtility)), sets.Set([subdummy, dummy])) # getUtilitiesFor will only find one, because the more local # one shadows the less local one self.assertEqual(list(zapi.getUtilitiesFor(IDummyUtility)), [('', subdummy)])
def __call__(self): utility_service = zapi.getService(zapi.servicenames.Utilities) result = ('zapi.getServices() is zapi.getGlobalServices(): %s\n' 'IFiveUtilityService.providedBy(utility_service): %s\n' 'isinstance(zapi.getServices(), FiveSiteManager): %s\n' % (zapi.getServices() is zapi.getGlobalServices(), IFiveUtilityService.providedBy(utility_service), isinstance(zapi.getServices(), FiveSiteManager))) return result
def __call__(self): utility_service = zapi.getService(zapi.servicenames.Utilities) result = { 'zapi.getServices() is zapi.getGlobalServices()': zapi.getServices() is zapi.getGlobalServices(), 'IFiveUtilityService.providedBy(utility_service)': IFiveUtilityService.providedBy(utility_service), 'isinstance(zapi.getServices(), FiveSiteManager)': isinstance(zapi.getServices(), FiveSiteManager), } return pprint.pformat(result)
def test_getServicesHook(self): from Products.Five.site.localsite import FiveSiteManager from Products.Five.site.utility import SimpleLocalUtilityService local_sm = zapi.getServices(None) self.failIf(local_sm is serviceManager) self.failUnless(isinstance(local_sm, FiveSiteManager)) local_sm = zapi.getServices(self.folder.site) self.failIf(local_sm is serviceManager) self.failUnless(isinstance(local_sm, FiveSiteManager)) utils = zapi.getService(Utilities) self.failUnless(isinstance(utils, SimpleLocalUtilityService))
def test_getServicesHook(self): from Products.Five.site.localsite import FiveSiteManager from Products.Five.site.utility import SimpleLocalUtilityService local_sm = zapi.getServices(None) self.failIf(local_sm is serviceManager) self.failUnless(isinstance(local_sm, FiveSiteManager)) local_sm = zapi.getServices(self.folder.site) self.failIf(local_sm is serviceManager) self.failUnless(isinstance(local_sm, FiveSiteManager)) utils = zapi.getService(Utilities) self.failUnless(isinstance(utils, SimpleLocalUtilityService))
def test_registerUtilityOnSiteManager(self): sm = zapi.getServices() self.failUnless(IRegisterUtilitySimply.providedBy(sm)) dummy = DummyUtility() sm.registerUtility(IDummyUtility, dummy, 'dummy') self.assertEquals(zapi.getUtility(IDummyUtility, name='dummy'), dummy) self.assertEquals(list(zapi.getUtilitiesFor(IDummyUtility)), [('dummy', dummy)]) self.assertEquals( list(zapi.getAllUtilitiesRegisteredFor(IDummyUtility)), [dummy])
def test_registeringTwiceIsConflict(self): dummy1 = DummyUtility() dummy2 = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, dummy1) self.assertRaises(ValueError, sm.registerUtility, IDummyUtility, dummy2) sm.registerUtility(IDummyUtility, dummy1, 'dummy') self.assertRaises(ValueError, sm.registerUtility, IDummyUtility, dummy2, 'dummy')
def test_registerUtilityOnSiteManager(self): sm = zapi.getServices() self.failUnless(IRegisterUtilitySimply.providedBy(sm)) dummy = DummyUtility() sm.registerUtility(IDummyUtility, dummy, 'dummy') self.assertEquals(zapi.getUtility(IDummyUtility, name='dummy'), dummy) self.assertEquals(list(zapi.getUtilitiesFor(IDummyUtility)), [('dummy', dummy)]) self.assertEquals(list(zapi.getAllUtilitiesRegisteredFor( IDummyUtility)), [dummy])
def test_registeringTwiceIsConflict(self): dummy1 = DummyUtility() dummy2 = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, dummy1) self.assertRaises(ValueError, sm.registerUtility, IDummyUtility, dummy2) sm.registerUtility(IDummyUtility, dummy1, 'dummy') self.assertRaises(ValueError, sm.registerUtility, IDummyUtility, dummy2, 'dummy')
def test_registerTwoUtilitiesWithSameNameDifferentInterface(self): sm = zapi.getServices() self.failUnless(IRegisterUtilitySimply.providedBy(sm)) dummy = DummyUtility() superdummy = DummyUtility() directlyProvides(superdummy, ISuperDummyUtility) sm.registerUtility(IDummyUtility, dummy, 'dummy') sm.registerUtility(ISuperDummyUtility, superdummy, 'dummy') self.assertEquals(zapi.getUtility(IDummyUtility, 'dummy'), dummy) self.assertEquals(zapi.getUtility(ISuperDummyUtility, 'dummy'), superdummy)
def test_registerTwoUtilitiesWithSameNameDifferentInterface(self): sm = zapi.getServices() self.failUnless(IRegisterUtilitySimply.providedBy(sm)) dummy = DummyUtility() superdummy = DummyUtility() directlyProvides(superdummy, ISuperDummyUtility) sm.registerUtility(IDummyUtility, dummy, 'dummy') sm.registerUtility(ISuperDummyUtility, superdummy, 'dummy') self.assertEquals(zapi.getUtility(IDummyUtility, 'dummy'), dummy) self.assertEquals(zapi.getUtility(ISuperDummyUtility, 'dummy'), superdummy)
def test_nestedSitesDontConflictButStillAcquire(self): # let's register a dummy utility in the dummy site dummy = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, dummy) # let's also create a subsite and make that our site manage_addDummySite(self.folder.site, 'subsite') enableLocalSiteHook(self.folder.site.subsite) setSite(self.folder.site.subsite) # we should still be able to lookup the original utility from # the site one level above self.assertEqual(zapi.getUtility(IDummyUtility), dummy) # now we register a dummy utility in the subsite and see that # its registration doesn't conflict subdummy = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, subdummy) # when we look it up we get the more local one now because the # more local one shadows the less local one self.assertEqual(zapi.getUtility(IDummyUtility), subdummy) # getAllUtilitiesFor gives us both the more local and the less # local utility (XXX not sure if this is the right semantics # for getAllUtilitiesFor) self.assertEqual( sets.Set(zapi.getAllUtilitiesRegisteredFor(IDummyUtility)), sets.Set([subdummy, dummy])) # getUtilitiesFor will only find one, because the more local # one shadows the less local one self.assertEqual(list(zapi.getUtilitiesFor(IDummyUtility)), [('', subdummy)])
def test_utilitiesHaveProperAcquisitionContext(self): dummy = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, dummy) # let's see if we can acquire something all the way from the # root (Application) object; we need to be careful to choose # something that's only available from the root object from Acquisition import aq_acquire dummy = zapi.getUtility(IDummyUtility) acquired = aq_acquire(dummy, 'ZopeAttributionButton', None) self.failUnless(acquired is not None) name, dummy = zapi.getUtilitiesFor(IDummyUtility).next() acquired = aq_acquire(dummy, 'ZopeAttributionButton', None) self.failUnless(acquired is not None) dummy = zapi.getAllUtilitiesRegisteredFor(IDummyUtility).next() acquired = aq_acquire(dummy, 'ZopeAttributionButton', None) self.failUnless(acquired is not None)
def test_utilitiesHaveProperAcquisitionContext(self): dummy = DummyUtility() sm = zapi.getServices() sm.registerUtility(IDummyUtility, dummy) # let's see if we can acquire something all the way from the # root (Application) object; we need to be careful to choose # something that's only available from the root object from Acquisition import aq_acquire dummy = zapi.getUtility(IDummyUtility) acquired = aq_acquire(dummy, 'ZopeAttributionButton', None) self.failUnless(acquired is not None) name, dummy = zapi.getUtilitiesFor(IDummyUtility).next() acquired = aq_acquire(dummy, 'ZopeAttributionButton', None) self.failUnless(acquired is not None) dummy = zapi.getAllUtilitiesRegisteredFor(IDummyUtility).next() acquired = aq_acquire(dummy, 'ZopeAttributionButton', None) self.failUnless(acquired is not None)
def test_derivedInterfaceRegistration(self): # Utilities providing a derived interface should be listed # when you ask for an interface. So ask for IDummmyInterace, and # anything registered for IDummyInterface of ISuperDummyInterface # should come back. sm = zapi.getServices() self.failUnless(IRegisterUtilitySimply.providedBy(sm)) dummy = DummyUtility() superdummy = DummyUtility() directlyProvides(superdummy, ISuperDummyUtility) uts = list(zapi.getUtilitiesFor(IDummyUtility)) self.failUnlessEqual(uts, []) sm.registerUtility(ISuperDummyUtility, superdummy) # We should be able to access this utility both with # IDummyUtility and ISuperDummyUtility interfaces: uts = list(zapi.getUtilitiesFor(IDummyUtility)) self.failUnless(uts[0][1].aq_base is superdummy) uts = list(zapi.getUtilitiesFor(ISuperDummyUtility)) self.failUnless(uts[0][1].aq_base is superdummy) # Also try that the standard zapi call works: ut = zapi.getUtility(IDummyUtility, context=self.folder.site) self.failUnless(ut.aq_base is superdummy) ut = zapi.getUtility(ISuperDummyUtility, context=self.folder.site) self.failUnless(ut.aq_base is superdummy) # If we register a second utility we should find both utilities # when looking for the base interface sm.registerUtility(IDummyUtility, dummy) uts = list(zapi.getAllUtilitiesRegisteredFor(IDummyUtility)) self.failUnless(dummy in uts) self.failUnless(superdummy in uts) # But we should find only one when looking for the derived interface uts = list(zapi.getAllUtilitiesRegisteredFor(ISuperDummyUtility)) self.failUnless(dummy not in uts) self.failUnless(superdummy in uts)
def test_derivedInterfaceRegistration(self): # Utilities providing a derived interface should be listed # when you ask for an interface. So ask for IDummmyInterace, and # anything registered for IDummyInterface of ISuperDummyInterface # should come back. sm = zapi.getServices() self.failUnless(IRegisterUtilitySimply.providedBy(sm)) dummy = DummyUtility() superdummy = DummyUtility() directlyProvides(superdummy, ISuperDummyUtility) uts = list(zapi.getUtilitiesFor(IDummyUtility)) self.failUnlessEqual(uts, []) sm.registerUtility(ISuperDummyUtility, superdummy) # We should be able to access this utility both with # IDummyUtility and ISuperDummyUtility interfaces: uts = list(zapi.getUtilitiesFor(IDummyUtility)) self.failUnless(uts[0][1].aq_base is superdummy) uts = list(zapi.getUtilitiesFor(ISuperDummyUtility)) self.failUnless(uts[0][1].aq_base is superdummy) # Also try that the standard zapi call works: ut = zapi.getUtility(IDummyUtility, context=self.folder.site) self.failUnless(ut.aq_base is superdummy) ut = zapi.getUtility(ISuperDummyUtility, context=self.folder.site) self.failUnless(ut.aq_base is superdummy) # If we register a second utility we should find both utilities # when looking for the base interface sm.registerUtility(IDummyUtility, dummy) uts = list(zapi.getAllUtilitiesRegisteredFor(IDummyUtility)) self.failUnless(dummy in uts) self.failUnless(superdummy in uts) # But we should find only one when looking for the derived interface uts = list(zapi.getAllUtilitiesRegisteredFor(ISuperDummyUtility)) self.failUnless(dummy not in uts) self.failUnless(superdummy in uts)