def test_getNextUtility(self): # test local site vs. global site global_dummy = DummyUtility() provideUtility(global_dummy, IDummyUtility) local_dummy = DummyUtility() sm = zapi.getSiteManager() sm.registerUtility(IDummyUtility, local_dummy) self.assertEquals(zapi.getUtility(IDummyUtility), local_dummy) self.assertEquals(getNextUtility(self.folder.site, IDummyUtility), global_dummy) # test local site vs. nested local site manage_addDummySite(self.folder.site, 'subsite') enableLocalSiteHook(self.folder.site.subsite) setSite(self.folder.site.subsite) sublocal_dummy = DummyUtility() sm = zapi.getSiteManager() sm.registerUtility(IDummyUtility, sublocal_dummy) self.assertEquals(zapi.getUtility(IDummyUtility), sublocal_dummy) self.assertEquals( getNextUtility(self.folder.site.subsite, IDummyUtility), local_dummy) self.assertEquals(getNextUtility(self.folder.site, IDummyUtility), global_dummy)
def test_nestedSitesDontConflictButStillAcquire(self): # let's register a dummy utility in the dummy site dummy = DummyUtility() sm = zapi.getSiteManager() 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.getSiteManager() 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_getNextUtility(self): # test local site vs. global site global_dummy = DummyUtility() provideUtility(global_dummy, IDummyUtility) local_dummy = DummyUtility() sm = zapi.getSiteManager() sm.registerUtility(IDummyUtility, local_dummy) self.assertEquals(zapi.getUtility(IDummyUtility), local_dummy) self.assertEquals(getNextUtility(self.folder.site, IDummyUtility), global_dummy) # test local site vs. nested local site manage_addDummySite(self.folder.site, 'subsite') enableLocalSiteHook(self.folder.site.subsite) setSite(self.folder.site.subsite) sublocal_dummy = DummyUtility() sm = zapi.getSiteManager() sm.registerUtility(IDummyUtility, sublocal_dummy) self.assertEquals(zapi.getUtility(IDummyUtility), sublocal_dummy) self.assertEquals(getNextUtility(self.folder.site.subsite, IDummyUtility), local_dummy) self.assertEquals(getNextUtility(self.folder.site, IDummyUtility), global_dummy)
def test_ZopeVersion(self): runtime_info = self._Test__new() # we expect that there is no utility self.assertEqual(runtime_info.getZopeVersion(), u"Unavailable") zapi.getSiteManager().provideUtility(IZopeVersion, TestZopeVersion()) self.assertEqual(runtime_info.getZopeVersion(), stupid_version_string)
def test_getSiteManagerHook(self): from Products.Five.site.localsite import FiveSiteManager from Products.Five.site.utility import SimpleLocalUtilityRegistry local_sm = zapi.getSiteManager(None) self.failIf(local_sm is zapi.getGlobalSiteManager()) self.failUnless(isinstance(local_sm, FiveSiteManager)) local_sm = zapi.getSiteManager(self.folder.site) self.failIf(local_sm is zapi.getGlobalSiteManager()) self.failUnless(isinstance(local_sm, FiveSiteManager)) sm = zapi.getSiteManager() self.failUnless(isinstance(sm.utilities, SimpleLocalUtilityRegistry))
def test_getUtilitiesNoUtilitiesFolder(self): sm = zapi.getSiteManager() self.failUnless(sm.queryUtility(IDummyUtility) is None) self.assertEquals(list(sm.getUtilitiesFor(IDummyUtility)), []) self.assertEquals(list(sm.getAllUtilitiesRegisteredFor(IDummyUtility)), [])
def testDefaultSkin(self): request = TestRequest() self.assertEqual(zapi.queryMultiAdapter((ob, request), name='test'), None) xmlconfig(StringIO(template % ( ''' <browser:layer name="zmi" /> <browser:skin name="zmi" layers="zmi" /> <browser:defaultSkin name="zmi" /> <browser:page name="test" class="zope.app.component.tests.views.VZMI" layer="zmi" for="zope.app.component.tests.views.IC" permission="zope.Public" attribute="index" /> <browser:page name="test" class="zope.app.component.tests.views.V1" for="zope.app.component.tests.views.IC" permission="zope.Public" attribute="index" /> ''' ))) # Simulate Zope Publication behavior in beforeTraversal() adapters = zapi.getSiteManager().adapters skin = adapters.lookup((providedBy(request),), IDefaultSkin, '') directlyProvides(request, skin) v = zapi.queryMultiAdapter((ob, request), name='test') self.assert_(issubclass(v.__class__, VZMI))
def test_local_utilities(self): gsm = zapi.getGlobalSiteManager() gsm.provideUtility(IInterface, Foo("global")) gsm.provideUtility(IInterface, Foo("global bob"), name="bob") sm = zapi.getSiteManager(self.rootFolder) default = traverse(self.rootFolder, "++etc++site/default") default['foo'] = Foo("local") foo = default['foo'] cm = default.registrationManager for name in ('', 'bob'): registration = UtilityRegistration(name, IInterface, foo) cname = cm.addRegistration(registration) registration = traverse(cm, cname) gout = name and "foo global "+name or "foo global" self.assertEqual(sm.queryUtility(IInterface, name).foo(), gout) registration.status = ActiveStatus self.assertEqual( sm.queryUtility(IInterface, name).foo(), "foo local") registration.status = InactiveStatus self.assertEqual(sm.queryUtility(IInterface, name).foo(), gout)
def test_getUtilitiesNoUtilitiesFolder(self): sm = zapi.getSiteManager() #XXX test whether sm really is a local site... self.failUnless(sm.queryUtility(IDummyUtility) is None) self.assertEquals(list(sm.getUtilitiesFor(IDummyUtility)), []) self.assertEquals(list(sm.getAllUtilitiesRegisteredFor(IDummyUtility)), [])
def update(self): message = self.applyUpdates() self.configBase = zapi.absoluteURL(zapi.getSiteManager(), self.request) registrations = self.context.info() # This is OK because registrations is just a list of dicts registrations = removeSecurityProxy(registrations) inactive = 1 for info in registrations: if info['active']: inactive = None else: info['active'] = False reg = info['registration'] info['summary'] = reg.implementationSummary() info['id'] = zapi.getPath(reg) # Add a dummy registration since the stack removes trailing None. registrations.append({"active": False, "id": "disable", "summary": ""}) self.inactive = inactive self.registrations = registrations self.message = message
def __BBB_old_getComponent(self, path): service_manager = zapi.getSiteManager(self) # Get the root and unproxy it if path.startswith("/"): # Absolute path root = removeAllProxies(zapi.getRoot(service_manager)) component = zapi.traverse(root, path) else: # Relative path. ancestor = self.__parent__.__parent__ component = zapi.traverse(ancestor, path) if self.permission: if type(component) is Proxy: # There should be at most one security Proxy around an object. # So, if we're going to add a new security proxy, we need to # remove any existing one. component = removeSecurityProxy(component) interface = self.getInterface() checker = InterfaceChecker(interface, self.permission) component = Proxy(component, checker) return component
def isInIctSite(self): """ this supervisor is under a ict site """ sitem = zapi.getSiteManager(self) site = zapi.getParent(sitem) if IIctSite.providedBy(site): return True return False
def getSiteManagementFolder(self, tool): """Get the site management folder for this tool.""" sm = zapi.getSiteManager() if not tool.folder in sm: folder = site.SiteManagementFolder() zope.event.notify(objectevent.ObjectCreatedEvent(folder)) sm[tool.folder] = folder return sm[tool.folder]
def toolExists(self, interface, name=''): """Check whether a tool already exists in this site""" sm = zapi.getSiteManager() for reg in sm.registrations(): if isinstance(reg, site.UtilityRegistration): if reg.name == name and reg.provided == interface: return True return False
def getInterfaceURL(self, name): sm = zapi.getSiteManager(self.context) try: getInterface(self.context, name) url = zapi.absoluteURL(sm, self.request) except ComponentLookupError: return "" return "%s/interfacedetail.html?id=%s" % (url, name)
def __call__(self): sm = zapi.getSiteManager() result = ('zapi.getSiteManager() is zapi.getGlobalSiteManager(): %s\n' 'IFiveUtilityRegistry.providedBy(utility_service): %s\n' 'isinstance(zapi.getSiteManager(), FiveSiteManager): %s' % (sm is zapi.getGlobalSiteManager(), IFiveUtilityRegistry.providedBy(sm.utilities), isinstance(sm, FiveSiteManager))) return result
def __call__(self): sm = zapi.getSiteManager() result = ('zapi.getSiteManager() is zapi.getGlobalSiteManager(): %s\n' 'IFiveUtilityRegistry.providedBy(utility_service): %s\n' 'isinstance(zapi.getSiteManager(), FiveSiteManager): %s' % (sm is zapi.getGlobalSiteManager(), IFiveUtilityRegistry.providedBy( sm.utilities), isinstance(sm, FiveSiteManager))) return result
def UserPreferences(context=None): """Adapts an ``ILocation`` object to the ``IUserPreferences`` interface.""" if context is None: context = zapi.getSiteManager() rootGroup = zapi.getUtility(IPreferenceGroup) rootGroup = rootGroup.__bind__(context) rootGroup.__name__ = '++preferences++' zope.interface.alsoProvides(rootGroup, IContainmentRoot) return rootGroup
def queryLocalService(self, name, default=None): if name in _builtinServices: return self service = zapi.queryUtility(IService, name, self) if service is None: return default if zapi.getSiteManager(service) is not self: return default return service
def publishTraverse(self, request, name): '''See interface IBrowserPublisher''' resource = zapi.queryAdapter(request, name=name) if resource is None: raise NotFound(self, name) sm = zapi.getSiteManager() locate(resource, sm, name) return resource
def test_registerUtilityOnUtilityRegistry(self): utils = zapi.getSiteManager().utilities dummy = DummyUtility() utils.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_registerUtilityOnUtilityRegistry(self): utils = zapi.getSiteManager().utilities dummy = DummyUtility() utils.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_registerUtilityOnSiteManager(self): sm = zapi.getSiteManager() 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_registerUtilityOnSiteManager(self): sm = zapi.getSiteManager() 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.getSiteManager() 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 __call__(self): sm = zapi.getSiteManager() result = { 'zapi.getSiteManager() is zapi.getGlobalSiteManager()': sm is zapi.getGlobalSiteManager(), 'IFiveUtilityRegistry.providedBy(utility_service)': IFiveUtilityRegistry.providedBy(sm.utilities), 'isinstance(zapi.getSiteManager(), FiveSiteManager)': isinstance(sm, FiveSiteManager), } return pprint.pformat(result)
def queryNextSiteManager(context, default=None): """Get the next site manager. If the site manager of the given context is the global site manager, then `default` is returned. """ sm = zapi.getSiteManager(context) if zope.component.site.IGlobalSiteManager.providedBy(sm): return default if sm.next is None: return zapi.getGlobalSiteManager() return sm.next
def test_registerTwoUtilitiesWithSameNameDifferentInterface(self): sm = zapi.getSiteManager() 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 create_indices(self): """ will create all non existent indices in database """ sitem = zapi.getSiteManager(self) site = zapi.getParent(sitem) tmpEvent = TmpEvent() if IZopeSite.providedBy(site) or \ IIctSite.providedBy(site) or \ zapi.getParent(site) is None: tmpEvent.object = site createLocalUtils(tmpEvent)
def items(self): sm = zapi.getSiteManager() ifaces = {} while sm is not None: for reg in sm.registrations(): if isinstance(reg, UtilityRegistration): path = getPythonPath(reg.provided) ifaces[path] = UtilityInterface(self, path, reg.provided) sm = queryNextSiteManager(sm) items = ifaces.items() items.sort(lambda x, y: cmp(x[0].split('.')[-1], y[0].split('.')[-1])) return items
def test_query_get_Utility_delegates_to_global(self): gsm = zapi.getGlobalSiteManager() gsm.provideUtility(IInterface, Foo("global")) gsm.provideUtility(IInterface, Foo("global bob"), name="bob") sm = zapi.getSiteManager(self.rootFolder) self.assert_(gsm != sm) # If queryUtility works on the site manager, getUtility in zapi must # also work. self.assertEqual(sm.queryUtility(IInterface).foo(), "foo global") self.assertEqual(sm.queryUtility(IInterface, "bob").foo(), "foo global bob")
def setUp(self): from zope.app.folder import Folder, rootFolder ReferenceSetupMixin.setUp(self) sm = zapi.getSiteManager(self.root) self.utility = setup.addUtility(sm, '1', IIntIds, IntIds()) self.root['folder1'] = Folder() self.root._p_jar = ConnectionStub() self.root['folder1']['folder1_1'] = self.folder1_1 = Folder() self.root['folder1']['folder1_1']['folder1_1_1'] = Folder() sm1_1 = setup.createSiteManager(self.folder1_1) self.utility1 = setup.addUtility(sm1_1, '2', IIntIds, IntIds())
def SimpleRegistrationRemoveSubscriber(registration, event): """Receive notification of remove event.""" sm = zapi.getSiteManager(registration) removed = event.object if (sm == removed) or inside(sm, removed): # we don't really care if the registration is active, since the site # is going away. return objectstatus = registration.status if objectstatus == interfaces.ActiveStatus: try: objectpath = zapi.getPath(registration) except: # XXX objectpath = str(registration) raise DependencyError("Can't delete active registration (%s)" % objectpath)
def SimpleRegistrationRemoveSubscriber(registration, event): """Receive notification of remove event.""" sm = zapi.getSiteManager(registration) removed = event.object if (sm == removed) or inside(sm, removed): # we don't really care if the registration is active, since the site # is going away. return objectstatus = registration.status if objectstatus == interfaces.ActiveStatus: try: objectpath = zapi.getPath(registration) except: # TODO decide if this is really the best fall-back plan objectpath = str(registration) msg = _("Can't delete active registration (${path})", mapping={u'path': objectpath}) raise DependencyError(msg)
def test_utilitiesHaveProperAcquisitionContext(self): dummy = DummyUtility() sm = zapi.getSiteManager() 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.getSiteManager() self.failUnless(IRegisterUtilitySimply.providedBy(sm)) dummy = DummyUtility() superdummy = DummyUtility() directlyProvides(superdummy, ISuperDummyUtility) uts = list(sm.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(sm.getUtilitiesFor(IDummyUtility)) self.failUnless(uts[0][1].aq_base is superdummy) uts = list(sm.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(sm.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(sm.getAllUtilitiesRegisteredFor(ISuperDummyUtility)) self.failUnless(dummy not in uts) self.failUnless(superdummy in uts)
def createUtils(root_folder, connection=None, dummy_db=None): sitem = zapi.getSiteManager(root_folder) site = zapi.getParent(sitem) isInSite = IIctSite.providedBy(site) madeLdapAdapter = ensureUtility(\ root_folder, IManageableLDAPAdapter, 'ManageableLDAPAdapter', ManageableLDAPAdapter, name='ManageableLDAPAdapter', copy_to_zlog=False) madeLdapPas = ensureUtility(\ root_folder, IMyLDAPAuthentication, 'MyLDAPAuthentication', MyLDAPAuthentication, name='MyLDAPAuthentication', copy_to_zlog=False) if isinstance(madeLdapPas, MyLDAPAuthentication): madeLdapPas.adapterName = 'ManageableLDAPAdapter' madeLdapPas.principalIdPrefix = u'ldap.' madePluggableAuthentication = ensureUtility(\ root_folder, IAdmUtilUserManagement, 'AdmUtilUserManagement', AdmUtilUserManagement, name='', copy_to_zlog=False) if isinstance(madePluggableAuthentication, PluggableAuthentication): logger.info(u"bootstrap: Ensure named AdmUtilUserManagement") dcore = IWriteZopeDublinCore(madePluggableAuthentication) dcore.title = u"User Authentication" dcore.created = datetime.utcnow() madePluggableAuthentication.ikName = dcore.title # madePluggableAuthentication.__post_init__() sitem = root_folder.getSiteManager() utils = [ util for util in sitem.registeredUtilities() if util.provided.isOrExtends(IAdmUtilSupervisor) ] instAdmUtilSupervisor = utils[0].component instAdmUtilSupervisor.appendEventHistory(\ u" bootstrap: made AdmUtilUserManagement-Utility") if not isInSite: # only produce in real zope root folder not sites groups = GroupFolder(u'group.') madePluggableAuthentication[u'groups'] = groups principals = PrincipalFolder(u'principal.') madePluggableAuthentication[u'principals'] = principals madePluggableAuthentication.credentialsPlugins = \ (u'Session Credentials', u'No Challenge if Authenticated',) p_user = InternalPrincipal(u'User', u'User', u'Initial User', passwordManagerName="SHA1") p_manager = InternalPrincipal(u'Manager', u'Manager', u'Initial Manager', passwordManagerName="SHA1") p_admin = InternalPrincipal(u'Administrator', u'Administrator', u'Initial Administrator', passwordManagerName="SHA1") p_developer = InternalPrincipal(u'Developer', u'Developer', u'Initial Developer', passwordManagerName="SHA1") principals[u'User'] = p_user principals[u'Manager'] = p_manager principals[u'Administrator'] = p_admin principals[u'Developer'] = p_developer grp_usr = GroupInformation( u'User', u'view & analyse data, generate reports ' u'& leave notes at any object') grp_mgr = GroupInformation( u'Manager', u'search, connect, configure ' u'& delete devices') grp_adm = GroupInformation( u'Administrator', u'install, configure ' u'& administrate System') grp_dvl = GroupInformation( u'Developer', u'individual adaption ' u'& development on System') grp_usr.principals = [u'principal.User'] grp_mgr.principals = [u'principal.Manager'] grp_adm.principals = [u'principal.Administrator'] grp_dvl.principals = [u'principal.Developer'] groups[u'User'] = grp_usr groups[u'Manager'] = grp_mgr groups[u'Administrator'] = grp_adm groups[u'Developer'] = grp_dvl madePluggableAuthentication[u'LDAPAuthentication'] = madeLdapPas madePluggableAuthentication.authenticatorPlugins = \ (u'groups', u'principals', u'LDAPAuthentication', ) prm = IPrincipalRoleManager(root_folder) prm.assignRoleToPrincipal(u'org.ict_ok.usr', u'group.User') prm.assignRoleToPrincipal(u'org.ict_ok.mgr', u'group.Manager') prm.assignRoleToPrincipal(u'org.ict_ok.adm', u'group.Administrator') prm.assignRoleToPrincipal(u'org.ict_ok.dvl', u'group.Developer') else: # is in site madePluggableAuthentication.credentialsPlugins = \ (u'Session Credentials', u'No Challenge if Authenticated',) madePluggableAuthentication[u'LDAPAuthentication'] = madeLdapPas madePluggableAuthentication.authenticatorPlugins = \ (u'LDAPAuthentication', ) transaction.get().commit() if connection is not None: connection.close()
def getRegistry(self): return zapi.getSiteManager(self)
def __init__(self, container): self.__parent__ = container self.sitemanager = zapi.getSiteManager(container)