[Checkins] SVN: Sandbox/gotcha/z3c.taskqueue/src/z3c/taskqueue/startup.py refactor for better readability

Godefroid Chapelle gotcha at bubblenet.be
Tue Apr 20 08:36:12 EDT 2010


Log message for revision 111172:
  refactor for better readability

Changed:
  U   Sandbox/gotcha/z3c.taskqueue/src/z3c/taskqueue/startup.py

-=-
Modified: Sandbox/gotcha/z3c.taskqueue/src/z3c/taskqueue/startup.py
===================================================================
--- Sandbox/gotcha/z3c.taskqueue/src/z3c/taskqueue/startup.py	2010-04-20 12:14:27 UTC (rev 111171)
+++ Sandbox/gotcha/z3c.taskqueue/src/z3c/taskqueue/startup.py	2010-04-20 12:36:12 UTC (rev 111172)
@@ -38,23 +38,19 @@
     configuration = getProductConfiguration('z3c.taskqueue')
     startSpecifications = getStartSpecifications(configuration)
 
-    for siteName, serviceName in startSpecifications:
-        serviceCount = 0
-        sites = getSites(siteName, root_folder)
+    for sitesIdentifier, servicesIdentifier in startSpecifications:
+        startedAnything = False
+        sites = getSites(sitesIdentifier, root_folder)
         for site in sites:
-            if serviceName == '*':
-                services = getAllServices(site, root_folder)
+            if servicesIdentifier == '*':
+                started = startAllServices(site, root_folder)
             else:
-                service = getService(site, serviceName)
-                if service == None:
-                    services = []
-                else:
-                    services = [service]
-            serviceCount += startServices(services)
+                started = startOneService(site, servicesIdentifier)
+            startedAnything = startedAnything or started
 
-        if (siteName == "*" or serviceName == "*") and serviceCount == 0:
-            msg = 'no services started by directive %s@%s'
-            log.warn(msg % (siteName, serviceName))
+        if sitesIdentifier == "*" and not startedAnything:
+            msg = 'no services started by directive *@%s'
+            log.warn(msg % servicesIdentifier)
 
 
 def getRootFolder(event):
@@ -67,34 +63,34 @@
 
 def getStartSpecifications(configuration):
     """get a list of sites/services to start"""
-
-    autostartParts = []
     if configuration is not None:
         autostart = configuration.get('autostart', '')
         autostartParts = [name.strip()
                         for name in autostart.split(',')]
 
-    result = [name.split('@') for name in autostartParts if name]
-    return result
+        specs = [name.split('@') for name in autostartParts if name]
+        return specs
+    else:
+        return []
 
 
-def getSites(siteName, root_folder):
+def getSites(sitesIdentifier, root_folder):
     # we search only for sites at the database root level
-    if siteName == '':
-        sites = [root_folder]
-    elif siteName == '*':
-        sites = getAllSites(root_folder)
+    if sitesIdentifier == '':
+        return [root_folder]
+    elif sitesIdentifier == '*':
+        return getAllSites(root_folder)
     else:
-        site = getSite(siteName, root_folder)
-        if site == None:
-            sites = []
+        site = getSite(sitesIdentifier, root_folder)
+        if site is not None:
+            return [site]
         else:
-            sites = [site]
-    return sites
+            return []
 
 
 def getAllSites(root_folder):
     sites = []
+    # do not forget to include root folder as it might have registered services
     sites.append(root_folder)
     root_values = root_folder.values()
     for folder in root_values:
@@ -106,45 +102,70 @@
 def getSite(siteName, root_folder):
     try:
         site = root_folder.get(siteName)
+        return site
     except KeyError:
         log.error('site %s not found' % siteName)
-        site = None
-    return site
+        return None
 
 
+def startAllServices(site, root_folder):
+    startedAnything = False
+    services = getAllServices(site, root_folder)
+    for service in services:
+        started = startService(service)
+        startedAnything = startedAnything or started
+    if not startedAnything:
+        msg = 'no services started for site %s'
+        siteName = getSiteName(site)
+        log.warn(msg % siteName)
+    return startedAnything
+
+
 def getAllServices(site, root_folder):
     sm = site.getSiteManager()
     services = list(
         sm.getUtilitiesFor(interfaces.ITaskService))
+    # filter out services registered in root
     root_sm = root_folder.getSiteManager()
     if sm != root_sm:
-        # filter out services defined in root
         rootServices = list(root_sm.getUtilitiesFor(
             interfaces.ITaskService))
         services = [s for s in services
                        if s not in rootServices]
+    services = [service for name, service in services]
     return services
 
 
+def startService(service):
+    if not service.isProcessing():
+        service.startProcessing()
+        return True
+    else:
+        return False
+
+
+def getSiteName(site):
+    siteName = getattr(site, '__name__', '')
+    if siteName is None:
+        siteName = 'root'
+    return siteName
+
+
+def startOneService(site, serviceName):
+    service = getService(site, serviceName)
+    if service is not None:
+        return startService(service)
+    else:
+        return False
+
+
 def getService(site, serviceName):
     service = component.queryUtility(interfaces.ITaskService,
         context=site, name=serviceName)
     if service is not None:
-        service = (serviceName, service)
+        return service
     else:
-        csName = getattr(site, '__name__', '')
-        if csName is None:
-            csName = 'root'
+        siteName = getSiteName(site)
         msg = 'service %s on site %s not found'
-        log.error(msg % (serviceName, csName))
-        service = None
-    return service
-
-
-def startServices(services):
-    serviceCount = 0
-    for srvname, service in services:
-        if not service.isProcessing():
-            service.startProcessing()
-            serviceCount += 1
-    return serviceCount
+        log.error(msg % (serviceName, siteName))
+        return None



More information about the checkins mailing list