#
# BusyB, an automated build utility.
#
# Copyright (C) 1997-2003
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
#
import time
from Int import Int
from busybee.TriggerState import TriggerState
#
# Base class for triggers, implements the repeat logic, contains
# a stub shouldFire() method which always returns [ true, ''].
#
class Trigger:
def __init__(self):
self.name = "trigger"
self.interval = Int(5)
self.count = Int(-1)
self.logger = None
def setLogger(self, l):
self.logger = l
def setText(self, t):
pass
def setCount(self, n):
self.count = n
def setInterval(self, i):
self.interval = i
def setParent( self, p ):
self.parent = p
p.setTrigger(self)
def getLogger(self):
return self.logger
#
# Go into a loop of sleeping
# and firing the trigger.
#
def process( self ):
self.getLogger().timeStamp( "Starting: " + str(self) )
n = self.count.getN()
if n > 0:
for j in range(n):
self.oneStep()
else:
while 1:
self.oneStep()
#
# Do one step of the repeat loop. Note that we
# do the sleep in 1 sec intervals so that
# on windows we can interrupt a long sleep.
#
def oneStep(self):
for i in range(self.interval.getN()):
time.sleep(1)
print 'in trigger, self = ', self
result = self.shouldFire()
print 'result = ', result
if result():
self.fire(result)
def shouldFire(self):
return TriggerState(1, str(self) )
def fire(self, reason):
self.parent.invoke(reason)
def __str__(self):
return "trigger. Count: " + str(self.count) + " Interval: " + str(self.interval)
|