[Checkins] SVN: lovely.remotetask/branches/port-for-zope29/ An
initial port of lovely.remotetask for zope 2.9. It works,
but there could perhaps be more tests. An example is added that shows
the simplest way to use this package.
Tim TerlegÃÂ¥rd
tim.terlegard at lovelysystems.com
Fri Sep 21 08:16:39 EDT 2007
Log message for revision 79792:
An initial port of lovely.remotetask for zope 2.9. It works, but there could perhaps be more tests. An example is added that shows the simplest way to use this package.
Changed:
A lovely.remotetask/branches/port-for-zope29/dependencies.txt
A lovely.remotetask/branches/port-for-zope29/remotetaskexample/
A lovely.remotetask/branches/port-for-zope29/remotetaskexample/__init__.py
A lovely.remotetask/branches/port-for-zope29/remotetaskexample/browser.py
A lovely.remotetask/branches/port-for-zope29/remotetaskexample/configure.zcml
A lovely.remotetask/branches/port-for-zope29/remotetaskexample/interfaces.py
A lovely.remotetask/branches/port-for-zope29/remotetaskexample/service.py
A lovely.remotetask/branches/port-for-zope29/remotetaskexample/task.py
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/README.txt
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/TESTING.txt
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/__init__.py
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/configure.zcml
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/job.py
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/service.py
A lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/services.py
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/configure.zcml
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/job.py
U lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/service.py
-=-
Added: lovely.remotetask/branches/port-for-zope29/dependencies.txt
===================================================================
--- lovely.remotetask/branches/port-for-zope29/dependencies.txt (rev 0)
+++ lovely.remotetask/branches/port-for-zope29/dependencies.txt 2007-09-21 12:16:39 UTC (rev 79792)
@@ -0,0 +1,29 @@
+This zope 2.9 branch of lovely.remotetask needs Five to run.
+Tested with Five 1.4.2.
+
+This has to be applied to the site:
+
+ from zope.app.component.hooks import setSite
+ from Products.Five.site.localsite import enableLocalSiteHook
+ enableLocalSiteHook(portal)
+ setSite(portal)
+
+and a plone site would need some zcml:
+
+ <configure
+ xmlns="http://namespaces.zope.org/zope"
+ xmlns:five="http://namespaces.zope.org/five">
+
+ <configure package="Products.CMFPlone">
+ <class
+ class=".Portal.PloneSite">
+ <implements interface="zope.app.component.interfaces.IPossibleSite" />
+ </class>
+
+ <five:localsite class=".Portal.PloneSite" />
+ </configure>
+
+ </configure>
+
+The above is not a part of lovely.remotetask as this is possible
+provided by some other product.
Property changes on: lovely.remotetask/branches/port-for-zope29/dependencies.txt
___________________________________________________________________
Name: svn:eol-style
+ native
Added: lovely.remotetask/branches/port-for-zope29/remotetaskexample/__init__.py
===================================================================
Property changes on: lovely.remotetask/branches/port-for-zope29/remotetaskexample/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: lovely.remotetask/branches/port-for-zope29/remotetaskexample/browser.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/remotetaskexample/browser.py (rev 0)
+++ lovely.remotetask/branches/port-for-zope29/remotetaskexample/browser.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -0,0 +1,60 @@
+from Products.CMFCore.utils import getToolByName
+from zope.component import getUtility, getUtilitiesFor
+from lovely.remotetask.interfaces import ITaskService
+from remotetaskexample.service import ExampleService
+import transaction
+
+class Example(object):
+ """ Some docis """
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def __call__(self):
+ portal_url = getToolByName(self.context, 'portal_url')
+ site = portal_url.getPortalObject()
+
+ service = getUtility(ITaskService, name='ExampleService',
+ context=site)
+ service.startProcessing()
+ return "successfully started service"
+
+class RunTask(object):
+ """ Some docis """
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def __call__(self):
+ service = getUtility(ITaskService, name='ExampleService')
+ service.add(u'exampletask', 'china')
+ return "exampletask added"
+
+class AddExampleService(object):
+ """ Adds a service to the site. """
+
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def __call__(self):
+ portal_url = getToolByName(self.context, 'portal_url')
+ site = portal_url.getPortalObject()
+
+ service = ExampleService()
+
+ sm = site.getSiteManager()
+ sm.registerUtility(ITaskService, service, 'ExampleService')
+ service = sm.queryUtility(ITaskService, 'ExampleService')
+ service.__parent__ = sm
+ service.id = 'ITaskService-ExampleService'
+ service.__name__ = service.getId()
+
+ # startProcessing needs the utility to have a _p_jar so we need
+ # to use a savepoint here
+ transaction.savepoint()
+ service.startProcessing()
+
+ return "service successfully added and started"
Property changes on: lovely.remotetask/branches/port-for-zope29/remotetaskexample/browser.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: lovely.remotetask/branches/port-for-zope29/remotetaskexample/configure.zcml
===================================================================
--- lovely.remotetask/branches/port-for-zope29/remotetaskexample/configure.zcml (rev 0)
+++ lovely.remotetask/branches/port-for-zope29/remotetaskexample/configure.zcml 2007-09-21 12:16:39 UTC (rev 79792)
@@ -0,0 +1,39 @@
+<configure
+ xmlns:browser="http://namespaces.zope.org/browser"
+ xmlns:five="http://namespaces.zope.org/five"
+ xmlns="http://namespaces.zope.org/zope">
+
+ <class class=".service.ExampleService">
+ <implements
+ interface="zope.app.annotation.interfaces.IAttributeAnnotatable" />
+ <require
+ permission="zope.Public"
+ interface="lovely.remotetask.interfaces.ITaskService" />
+ </class>
+
+ <utility
+ factory=".task.ExampleTask"
+ name="exampletask" />
+
+ <browser:page
+ for="*"
+ name="examplebrowser"
+ class=".browser.Example"
+ permission="zope.Public"
+ />
+
+ <browser:page
+ for="*"
+ name="examplejob"
+ class=".browser.RunTask"
+ permission="zope.Public"
+ />
+
+ <browser:page
+ for="*"
+ name="addservice"
+ class=".browser.AddExampleService"
+ permission="cmf.ManagePortal"
+ />
+
+</configure>
Property changes on: lovely.remotetask/branches/port-for-zope29/remotetaskexample/configure.zcml
___________________________________________________________________
Name: svn:eol-style
+ native
Added: lovely.remotetask/branches/port-for-zope29/remotetaskexample/interfaces.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/remotetaskexample/interfaces.py (rev 0)
+++ lovely.remotetask/branches/port-for-zope29/remotetaskexample/interfaces.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -0,0 +1,4 @@
+from lovely.remotetask.interfaces import ITask
+
+class IExampleTask(ITask):
+ """ Identifying this task as a task for the ExampleTask service. """
Property changes on: lovely.remotetask/branches/port-for-zope29/remotetaskexample/interfaces.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: lovely.remotetask/branches/port-for-zope29/remotetaskexample/service.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/remotetaskexample/service.py (rev 0)
+++ lovely.remotetask/branches/port-for-zope29/remotetaskexample/service.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -0,0 +1,12 @@
+from remotetaskexample.interfaces import IExampleTask
+from lovely.remotetask.service import TaskService
+from OFS.SimpleItem import SimpleItem
+
+class ExampleService(TaskService, SimpleItem):
+ taskInterface = IExampleTask
+
+ def __init__(self):
+ super(ExampleService, self).__init__()
+ parent = getattr(self, '__parent__', None)
+ if parent:
+ self.startProcessing()
Property changes on: lovely.remotetask/branches/port-for-zope29/remotetaskexample/service.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Added: lovely.remotetask/branches/port-for-zope29/remotetaskexample/task.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/remotetaskexample/task.py (rev 0)
+++ lovely.remotetask/branches/port-for-zope29/remotetaskexample/task.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -0,0 +1,8 @@
+from remotetaskexample.interfaces import IExampleTask
+from zope.interface import implements
+
+class ExampleTask(object):
+ implements(IExampleTask)
+
+ def __call__(self, service, jobid, input):
+ print "Running", input
Property changes on: lovely.remotetask/branches/port-for-zope29/remotetaskexample/task.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/README.txt
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/README.txt 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/README.txt 2007-09-21 12:16:39 UTC (rev 79792)
@@ -120,16 +120,12 @@
as soon as the `IDatabaseOpenedEvent` is fired. Let's emulate the zope.conf
settings:
- >>> class Config(object):
- ... mapping = {}
- ... def getSectionName(self):
- ... return 'lovely.remotetask'
- >>> config = Config()
>>> servicenames = ('site1 at TestTaskService1, site2 at TestTaskService2'
... ', at RootTaskService')
- >>> config.mapping['autostart'] = servicenames
- >>> from zope.app.appsetup.product import setProductConfigurations
- >>> setProductConfigurations([config])
+ >>> from App.config import getConfiguration
+ >>> conf = getConfiguration()
+ >>> task_conf = conf.product_config['lovely.remotetask'] = {}
+ >>> task_conf['autostart'] = servicenames
>>> from lovely.remotetask.service import getAutostartServiceNames
>>> getAutostartServiceNames()
['site1 at TestTaskService1', 'site2 at TestTaskService2', '@RootTaskService']
@@ -138,41 +134,6 @@
registered at the root. We test this use-case in a separate footnote so that
the flow of this document is not broken. [#1]_
-On Zope startup the IDatabaseOpenedEvent is being fired, and will call
-the bootStrap method:
-
- >>> from ZODB.tests import util
- >>> import transaction
- >>> db = util.DB()
- >>> from zope.app.publication.zopepublication import ZopePublication
- >>> conn = db.open()
- >>> conn.root()[ZopePublication.root_name] = root
- >>> from zope.app.folder import Folder
- >>> root['site1'] = Folder()
- >>> transaction.commit()
-
-Fire the event::
-
- >>> from zope.app.appsetup.interfaces import DatabaseOpenedWithRoot
- >>> from lovely.remotetask.service import bootStrapSubscriber
- >>> event = DatabaseOpenedWithRoot(db)
- >>> bootStrapSubscriber(event)
-
-and voila - the service is processing:
-
- >>> service.isProcessing()
- True
-
-The verification for the jobs in the root-level service is done in another
-footnote [#2]_
-
-Finally stop processing and kill the thread. We'll call service.process()
-manually as we don't have the right environment in the tests.
-
- >>> service.stopProcessing()
- >>> service.isProcessing()
- False
-
Let's now read a job:
>>> jobid = service.add(u'echo', {'foo': 'bar'})
@@ -429,11 +390,6 @@
1
-.. [#2] We verify the root_service does get processed:
-
- >>> root_service.isProcessing()
- True
-
Cleaning up root-level service:
>>> print root_service.getStatus(r_jobid)
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/TESTING.txt
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/TESTING.txt 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/TESTING.txt 2007-09-21 12:16:39 UTC (rev 79792)
@@ -30,6 +30,8 @@
>>> import lovely.remotetask.task
>>> echoTask = remotetask.task.SimpleTask(echo)
+ >>> from zope.interface import alsoProvides
+ >>> alsoProvides(echoTask, testing.ITaskStub)
The only API requirement on the converter is to be callable. Now we make sure
that the task works:
@@ -109,9 +111,10 @@
>>> def error(input):
... raise remotetask.task.TaskError('An error occurred.')
+ >>> errorTask = remotetask.task.SimpleTask(error)
+ >>> alsoProvides(errorTask, testing.ITaskStub)
>>> zope.component.provideUtility(
- ... remotetask.task.SimpleTask(error), provides=testing.ITaskStub,
- ... name='error')
+ ... errorTask, provides=testing.ITaskStub, name='error')
Now add and execute it:
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/__init__.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/__init__.py 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/__init__.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -1,2 +1,21 @@
# Make a package.
-from lovely.remotetask.service import TaskService
+from lovely.remotetask.service import TaskService, getAutostartServiceNames
+from lovely.remotetask.interfaces import ITaskService
+from zope.component import getUtilitiesFor
+from zope.app.component.hooks import getSite
+from Products.Five.site.interfaces import IFiveUtilityRegistry
+from Products.CMFCore.interfaces._content import ISiteRoot
+
+def initialize(context):
+ # dirty trick, but it works
+ app = context._ProductContext__app
+ services = getAutostartServiceNames()
+
+ for service in services:
+ site_name, service_name = service.split('@')
+ if site_name:
+ site = getattr(app, site_name, None)
+ if site:
+ registry = IFiveUtilityRegistry(site)
+ utility = registry.getUtility(ITaskService, name=service_name)
+ utility.startProcessing()
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/configure.zcml
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/configure.zcml 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/configure.zcml 2007-09-21 12:16:39 UTC (rev 79792)
@@ -11,21 +11,20 @@
class="..service.TaskService"
title="Remote Task Service"
description="A Remote Task Service"
- permission="zope.ManageContent"
+ permission="cmf.ManagePortal"
/>
<page
name="jobs.html"
for="..interfaces.ITaskService"
class=".service.JobsOverview"
- permission="zope.ManageContent"
- menu="zmi_views" title="Jobs"
+ permission="cmf.ManagePortal"
/>
<page
name="detail"
for="..interfaces.IJob"
- permission="zope.ManageContent"
+ permission="cmf.ManagePortal"
class=".job.JobDetail"
/>
@@ -39,17 +38,15 @@
<page
name="editjob"
for="..interfaces.ICronJob"
- permission="zope.ManageContent"
+ permission="cmf.ManagePortal"
class=".job.CronJobEdit"
- menu="zmi_views" title="edit"
/>
<page
name="addcronjob.html"
for="..interfaces.ITaskService"
class=".job.AddCronJob"
- permission="zope.ManageContent"
- menu="zmi_views" title="add cron"
+ permission="cmf.ManagePortal"
/>
<!-- traverser for the site -->
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/job.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/job.py 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/job.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -25,8 +25,8 @@
from zope import formlib
-from zope.traversing.browser.absoluteurl import absoluteURL
-from zope.publisher.browser import BrowserPage
+from zope.app.traversing.browser.absoluteurl import absoluteURL
+from zope.app.publisher.browser import BrowserView
from zope.app.pagetemplate import ViewPageTemplateFile
from zope.app.form.browser.textwidgets import TextWidget
@@ -38,14 +38,14 @@
return ()
-class JobDetail(BrowserPage):
+class JobDetail(BrowserView):
"""A simple task input detail view."""
def __call__(self):
return u'No input detail available'
-class CronJobDetail(BrowserPage):
+class CronJobDetail(BrowserView):
"""A simple task input detail view."""
def __call__(self):
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/service.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/service.py 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/service.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -21,10 +21,10 @@
import zope.interface
import zope.component
-from zope.publisher.browser import BrowserPage
+from zope.app.publisher.browser import BrowserView
from zope.publisher.interfaces import NotFound
from zope.security.proxy import removeSecurityProxy
-from zope.traversing.browser.absoluteurl import absoluteURL
+from zope.app.traversing.browser.absoluteurl import absoluteURL
from zope.app.pagetemplate import ViewPageTemplateFile
from zope.app.session.interfaces import ISession
@@ -286,7 +286,7 @@
return ''
-class JobsOverview(BrowserPage):
+class JobsOverview(BrowserView):
template = ViewPageTemplateFile('jobs.pt')
status = None
Added: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/services.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/services.py (rev 0)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/services.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -0,0 +1,9 @@
+class Add(object):
+ def __init__(self, context, request):
+ self.context = context
+ self.request = request
+
+ def __call__(self):
+ name = self.request.get('name')
+ if not name:
+ return "name wasn't supplied"
Property changes on: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/browser/services.py
___________________________________________________________________
Name: svn:keywords
+ Id
Name: svn:eol-style
+ native
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/configure.zcml
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/configure.zcml 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/configure.zcml 2007-09-21 12:16:39 UTC (rev 79792)
@@ -1,10 +1,11 @@
<configure
xmlns="http://namespaces.zope.org/zope"
+ xmlns:five="http://namespaces.zope.org/five"
i18n_domain="lovely.remotetask">
<class class=".service.TaskService">
<implements
- interface="zope.annotation.interfaces.IAttributeAnnotatable" />
+ interface="zope.app.annotation.interfaces.IAttributeAnnotatable" />
<require
permission="zope.Public"
interface=".interfaces.ITaskService" />
@@ -12,7 +13,7 @@
<class class=".job.Job">
<implements
- interface="zope.annotation.interfaces.IAttributeAnnotatable" />
+ interface="zope.app.annotation.interfaces.IAttributeAnnotatable" />
<require
permission="zope.Public"
interface=".interfaces.IJob"
@@ -21,7 +22,7 @@
<class class=".job.CronJob">
<implements
- interface="zope.annotation.interfaces.IAttributeAnnotatable" />
+ interface="zope.app.annotation.interfaces.IAttributeAnnotatable" />
<require
permission="zope.Public"
interface=".interfaces.ICronJob"
@@ -38,9 +39,9 @@
factory=".task.EchoTask"
name="echo" />
- <include file="xmlrpc.zcml" />
-
<include package=".browser" />
<include package=".generations" />
+ <five:registerPackage package="." initialize=".initialize" />
+
</configure>
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/job.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/job.py 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/job.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -35,8 +35,6 @@
id = FieldProperty(interfaces.IJob['id'])
task = FieldProperty(interfaces.IJob['task'])
status = FieldProperty(interfaces.IJob['status'])
- input = FieldProperty(interfaces.IJob['input'])
- output = FieldProperty(interfaces.IJob['output'])
error = FieldProperty(interfaces.IJob['error'])
created = FieldProperty(interfaces.IJob['created'])
started = FieldProperty(interfaces.IJob['started'])
@@ -46,6 +44,7 @@
self.id = id
self.task = task
self.input = input
+ self.output = None
self.created = datetime.datetime.now()
def __repr__(self):
Modified: lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/service.py
===================================================================
--- lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/service.py 2007-09-21 11:55:37 UTC (rev 79791)
+++ lovely.remotetask/branches/port-for-zope29/src/lovely/remotetask/service.py 2007-09-21 12:16:39 UTC (rev 79792)
@@ -24,16 +24,19 @@
import time
import zc.queue
import zope.interface
+from ZPublisher.HTTPRequest import HTTPRequest
+from ZPublisher.HTTPResponse import HTTPResponse
+import ZPublisher
import zope.publisher.base
import zope.publisher.publish
from BTrees.IOBTree import IOBTree
from zope import component
from zope.app import zapi
-from zope.app.appsetup.product import getProductConfiguration
+from App.config import getConfiguration
from zope.app.container import contained
from zope.app.publication.zopepublication import ZopePublication
from zope.security.proxy import removeSecurityProxy
-from zope.traversing.api import traverse
+from zope.app.traversing.api import traverse
from zope.component.interfaces import ComponentLookupError
from lovely.remotetask import interfaces, job, task
@@ -144,14 +147,17 @@
self._scheduledJobs = IOBTree()
if self._scheduledQueue == None:
self._scheduledQueue = zc.queue.PersistentQueue()
- path = [parent.__name__ for parent in zapi.getParents(self)
- if parent.__name__]
+ path = [path for path in self.getPhysicalPath() if path]
+ path.append('processNext')
path.reverse()
- path.append(self.__name__)
- path.append('processNext')
+ db = self._p_jar.db()
+ connection = db.open()
+ root = connection.root()
+ root_folder = root['Application']
+
thread = threading.Thread(
- target=processor, args=(self._p_jar.db(), path),
+ target=processor, args=(root_folder, path),
name='remotetasks.'+self.__name__)
thread.setDaemon(True)
thread.running = True
@@ -175,6 +181,7 @@
return False
def processNext(self, now=None):
+ """See interfaces.ITaskService"""
job = self._pullJob(now)
if job is None:
return False
@@ -276,7 +283,7 @@
return traverse(removeSecurityProxy(ob), name, None)
-def processor(db, path):
+def processor(root, path):
"""Job Processor
Process the jobs that are waiting in the queue. This processor is meant to
@@ -285,12 +292,18 @@
"""
path.reverse()
while threading.currentThread().running:
- request = zope.publisher.base.BaseRequest(None, {})
- request.setPublication(ProcessorPublication(db))
- request.setTraversalStack(path)
+ response = HTTPResponse()
+ env = { 'SERVER_NAME': 'dummy',
+ 'SERVER_PORT': '8080',
+ 'PATH_INFO': '/' + '/'.join(path) }
+ request = HTTPRequest(None, env, response)
+ request['PARENTS'] = [root]
+
try:
- zope.publisher.publish.publish(request, False)
- if not request.response._result:
+ ZPublisher.Publish.publish(request,'Zope2', [None])
+ # close the database connection
+ request.close()
+ if not request.response.body:
time.sleep(1)
except:
# This thread should never crash, thus a blank except
@@ -300,10 +313,14 @@
"""get a list of services to start"""
serviceNames = []
- config = getProductConfiguration('lovely.remotetask')
+ config = getConfiguration().product_config
if config is not None:
- serviceNames = [name.strip()
- for name in config.get('autostart', '').split(',')]
+ task_config = config.get('lovely.remotetask', None)
+ if task_config:
+ autostart = task_config.get('autostart', '')
+ serviceNames = [name.strip()
+ for name in autostart.split(',')]
+
return serviceNames
More information about the Checkins
mailing list