diff --git a/agent/core.py b/agent/core.py index c464923..97cb4d9 100644 --- a/agent/core.py +++ b/agent/core.py @@ -28,7 +28,7 @@ from loops.agent.interfaces import IAgent from loops.agent.config import Configurator from loops.agent.crawl import filesystem from loops.agent.schedule import Scheduler, Stopper -from loops.agent.transport import httpput +from loops.agent.transport import base crawlTypes = dict( @@ -36,7 +36,7 @@ crawlTypes = dict( ) transportTypes = dict( - httpput=httpput.Transporter, + httpput=base.Transporter, ) diff --git a/agent/interfaces.py b/agent/interfaces.py index cdeae3f..694de12 100644 --- a/agent/interfaces.py +++ b/agent/interfaces.py @@ -64,8 +64,15 @@ class IScheduledJob(Interface): startTime = Attribute('Date/time at which the job should be executed.') params = Attribute('Mapping with key/value pairs to be used by ' 'the ``execute()`` method.') + repeat = Attribute('Number of seconds after which the job should be ' + 'rescheduled. Do not repeat if 0.') successors = Attribute('Jobs to execute immediately after this ' - 'one has been finished.') + 'one has been finished.') + whenStarted = Attribute('A callable with no arguments that will ' + 'be called when the job has started.') + whenfinished = Attribute('A callable with one argument, the ' + 'result of running the job, that will be called when ' + 'the job has finished.') def execute(): """ Execute the job. diff --git a/agent/schedule.py b/agent/schedule.py index 268e7c1..5fa8d50 100644 --- a/agent/schedule.py +++ b/agent/schedule.py @@ -59,6 +59,9 @@ class Job(object): scheduler = None + whenStarted = lambda self: None + whenFinished = lambda self, result: None + def __init__(self, **params): self.startTime = 0 self.params = params @@ -76,6 +79,7 @@ class Job(object): def run(self): d = self.execute() d.addCallback(self.finishRun) + self.whenStarted() # TODO: logging def finishRun(self, result): @@ -86,6 +90,7 @@ class Job(object): job.params['result'] = result #job.run() self.scheduler.schedule(job) + self.whenFinished(result) # TODO: logging # reschedule if necessary if self.repeat: diff --git a/agent/testing/server.py b/agent/testing/server.py index 9c8a84d..5c48333 100644 --- a/agent/testing/server.py +++ b/agent/testing/server.py @@ -33,8 +33,7 @@ from twisted.web import http class RequestHandler(http.Request): def process(self): - print '***', self.uri - print '***', self.content.read() + print '***', repr(self.content.read()) if self.method in ('GET', 'POST'): self.write('

Hello World

') self.write('

dir(self): %s

' % dir(self)) diff --git a/agent/transport/base.py b/agent/transport/base.py index f9fb2c0..3d82c43 100644 --- a/agent/transport/base.py +++ b/agent/transport/base.py @@ -81,8 +81,8 @@ class Transporter(object): data.close() else: text = data - # TODO: encode text - # TODO: set headers, esp Content-Type + # TODO: encode text (?) + # TODO: set headers: Content-Type, Authorization, User-Agent path = resource.path app = resource.application deferreds = []