Package TEES :: Package Detectors :: Module StepSelector
[hide private]

Source Code for Module TEES.Detectors.StepSelector

  1  import sys 
  2  import types 
  3  import time, datetime 
  4   
5 -class StepSelector:
6 - def __init__(self, steps, fromStep=None, toStep=None, verbose=True, omitSteps=None):
7 self.steps = steps 8 if type(omitSteps) in types.StringTypes: 9 omitSteps = [omitSteps] 10 self.omitSteps = omitSteps 11 self.currentStep = None 12 self.currentStepStartTime = None 13 self.setLimits(fromStep, toStep) 14 self.verbose = verbose
15
16 - def markOmitSteps(self, steps):
17 if self.omitSteps == None: 18 self.omitSteps = [] 19 if type(steps) not in [types.ListType, types.TupleType]: 20 steps = [steps] 21 for step in steps: 22 if step not in self.omitSteps: 23 self.omitSteps.append(step)
24
25 - def setLimits(self, fromStep, toStep):
26 self.fromStep = fromStep 27 self.toStep = toStep 28 self.doSteps = None 29 if self.fromStep != None and (type(self.fromStep) == types.ListType or "," in self.fromStep): 30 self.doSteps = self.fromStep 31 if type(self.doSteps) != types.ListType: 32 self.doSteps = self.doSteps.split(",") 33 if self.doSteps[-1].strip() == "": 34 self.doSteps = self.doSteps[:-1] 35 self.fromStep = None 36 for step in self.doSteps: 37 assert step in self.steps, (step, self.steps) 38 elif self.fromStep != None: 39 assert self.fromStep in self.steps, (self.fromStep, self.steps) 40 if self.toStep != None: 41 assert self.toStep in self.steps, (self.toStep, self.steps)
42 43 # def getSharedStep(self, step, allSteps, direction=1): 44 # allStepsIndex = allSteps.inxed(step) 45 # while allSteps[allStepsIndex] not in self.steps: 46 # allStepsIndex += direction 47 # assert allStepsIndex > 0 and allStepsIndex < len(allSteps), (allStepsIndex, allSteps, self.steps) 48 # assert allSteps[allStepsIndex] in self.steps 49 # return allSteps[allStepsIndex] 50
51 - def printStepTime(self):
52 if self.currentStep != None and self.currentStepStartTime != None: 53 print >> sys.stderr, "===", "EXIT STEP", self.currentStep + ": " + str(datetime.timedelta(seconds=time.time()-self.currentStepStartTime)), "==="
54
55 - def getStepStatus(self, step):
56 if self.omitSteps != None and step in self.omitSteps: 57 return "OMIT" 58 stepIndex = self.steps.index(step) 59 # Get range 60 fromIndex = 0 61 if self.fromStep != None: 62 fromIndex = self.steps.index(self.fromStep) 63 toIndex = len(self.steps) - 1 64 if self.toStep != None: 65 toIndex = self.steps.index(self.toStep) 66 # Determine if step is in range 67 if stepIndex < fromIndex: 68 return "BEFORE" 69 if stepIndex > toIndex: 70 return "AFTER" 71 return "PROCESS"
72
73 - def check(self, step):
74 #print "CHECK", step, self.currentStep, self.steps, self.fromStep, self.toStep 75 assert step in self.steps 76 assert self.fromStep == None or self.fromStep in self.steps, (self.fromStep, self.toStep, self.steps) 77 assert self.toStep == None or self.toStep in self.steps, (self.fromStep, self.toStep, self.steps) 78 if self.doSteps != None: 79 for s in self.doSteps: 80 assert s in self.steps, (a, self.steps) 81 82 stepIndex = self.steps.index(step) 83 # Get current index 84 currentIndex = -1 85 if self.currentStep != None: 86 currentIndex = self.steps.index(self.currentStep) 87 #assert stepIndex == currentIndex + 1, (step, self.currentStep, self.steps) 88 # Get range 89 fromIndex = 0 90 if self.fromStep != None: 91 fromIndex = self.steps.index(self.fromStep) 92 toIndex = len(self.steps) - 1 93 if self.toStep != None: 94 toIndex = self.steps.index(self.toStep) 95 # Determine if step is in range 96 if stepIndex >= fromIndex and stepIndex <= toIndex: 97 if currentIndex < stepIndex: 98 if self.currentStepStartTime != None: 99 if self.verbose: print >> sys.stderr, "===", "EXIT STEP", self.currentStep, "time:", str(datetime.timedelta(seconds=time.time()-self.currentStepStartTime)), "===" 100 self.currentStep = step 101 self.currentStepStartTime = time.time() 102 if self.omitSteps != None and step in self.omitSteps: 103 if self.verbose: print >> sys.stderr, "Omitting step", step 104 return False 105 else: 106 return True 107 else: 108 if self.verbose: print >> sys.stderr, "Step", step, "already done, skipping." 109 return False 110 else: 111 if self.verbose: print >> sys.stderr, "Step", step, "out of range" 112 return False 113 114 assert False
115 116 # # Remember step ########################################### 117 # if self.currentStep == None: 118 # self.currentStep = step 119 # elif self.steps.index(step) <= self.steps.index(self.currentStep): 120 # print >> sys.stderr, "Step", step, "already done, skipping." 121 # return False 122 # else: 123 # self.currentStep = step 124 # 125 # # User control ########################################### 126 # # List control 127 # if self.doSteps != None: 128 # if step in self.doSteps: 129 # if self.toStep == None: 130 # return True 131 # else: 132 # assert self.toStep in self.steps 133 # if self.steps.index(self.toStep) >= self.steps.index(step): 134 # return True 135 # else: 136 # print >> sys.stderr, "Step", step, "out of range" 137 # return False 138 # else: 139 # print >> sys.stderr, "Skipping step", step, "by user request" 140 # return False 141 # 142 # # From-to control 143 # if self.fromStep == None and self.toStep == None: 144 # return True 145 # elif self.fromStep != None: 146 # assert self.fromStep in self.steps 147 # if self.steps.index(self.fromStep) <= self.steps.index(step): 148 # if self.toStep == None: 149 # return True 150 # assert self.toStep in self.steps 151 # if self.steps.index(self.toStep) >= self.steps.index(step): 152 # return True 153 # else: 154 # print >> sys.stderr, "Step", step, "out of range" 155 # return False 156 # else: 157 # print >> sys.stderr, "Skipping step", step, "by user request" 158 # return False 159 # else: # toStep != None 160 # assert self.toStep in self.steps 161 # if self.steps.index(self.toStep) >= self.steps.index(step): 162 # return True 163 # else: 164 # print >> sys.stderr, "Step", step, "out of range" 165 # return False 166