def this_jobs_sched(self): sess = getsession() new_action = action(ACTIONID = "DEETZ", CMDLINE = "echo no", USERID = self.USERID) sess.add(new_action) sess.flush() new_job = job(ACTIONID = "DEETZ", SCHEDID = "1 DAY", status = 0, SCHDATE = datetime.now()) sess.add(new_job) sess.flush() check_date = new_job.SCHDATE x = new_job.this_jobs_sch(5) day = string.atoi(datetime.now().strftime("%d")) #Get day mdate = mdatetime() daysinmon = mdate.days_in_month_temp(check_date) for i in x: new_day = string.atoi(i.strftime("%d")) self.assert_(new_day == day, "Days not match for this jobs sched.") day = day + 1 if day > daysinmon: day = 1 self.assert_(new_job.SCHDATE == check_date, "Old date and new date not match for this jobs sched.")
def editcalendar(self, id, year = datetime.now().strftime('%Y'), month = datetime.now().strftime('%m'), time=None, dashboard=0, editmode=0): sess = getsession() n = datetime(day = 1, year = int(year), month = int(month)) a = mdatetime() dim = a.days_in_month_temp(n) fromdate = n.replace(day = 1) todate = n.replace(day = dim) try: c = sess.query(calendar).filter(and_(calendar.CALID == id, and_(calendar.DATE >= fromdate, calendar.DATE <= todate))).all() if len(c) < 1: raise except: c = calendar(CALID = id, DATE = datetime(year = 1979, month = 1, day = 1, second = 0, minute = 0, hour = 0)) try: sess.add(c) sess.flush() except: pass c = sess.query(calendar).filter(and_(calendar.CALID == id, and_(calendar.DATE >= fromdate, calendar.DATE <= todate))).all() return self.lookup.get_template(CALENDARS + "editcalendar.html").render(id = id, cal = c, now = n, dim = dim, table = calendar_table, dashboard = dashboard, editmode=editmode)
def find_next_date(self): temp = mdatetime() temp.date = self.SCHDATE diff = self.time - self.SCHDATE diff = abs(diff) year = temp.mtimedelta(years=1) #add the correct number of days for that year # if no interval set interval = self.schedule.INTERVAL if interval < 1: interval = 1 #we default all rolls to 1 year imonths = 1 iweeks = 1 idays = 1 ihours = 1 iminutes = 1 iseconds = 1 #unless is is that schedue's interval method we assign it to the interval if self.schedule.DELTA == 0: iseconds = interval elif self.schedule.DELTA == 1: iminutes = interval elif self.schedule.DELTA == 2: ihours = interval elif self.schedule.DELTA == 3: idays = interval elif self.schedule.DELTA == 4: iweeks = interval elif self.schedule.DELTA == 5: imonths = interval #here we see when we need to roll the action forward to if diff > year: self.SCHDATE = self.SCHDATE + year elif (diff < year) and (diff > temp.mtimedelta(months=imonths)): self.SCHDATE = (temp + temp.mtimedelta(months=imonths)) elif (diff < temp.mtimedelta(months=imonths)) and (diff > timedelta(weeks=iweeks)): self.SCHDATE = temp.date + timedelta(weeks=iweeks) elif (diff < timedelta(weeks=iweeks)) and (diff > timedelta(days=idays)): self.SCHDATE = temp.date + timedelta(days=1) elif (diff < timedelta(days=idays)) and (diff > timedelta(hours=ihours)): self.SCHDATE = temp.date + timedelta(hours=ihours) elif (diff < timedelta(days=ihours)) and (diff > timedelta(hours=iminutes)): self.SCHDATE = temp.date + timedelta(hours=iminutes) else: self.SCHDATE = temp.date + timedelta(seconds=iseconds)
def roll(self): temp = mdatetime() interval = self.schedule.INTERVAL if interval < 1: interval = 1 while 1: #we check to see if the action needs to be rolled #we do not schedule actions into the past if self.SCHDATE < self.time: #we see if the end time is before the time #we then see if additional rolling is neccesary #after a first roll temp.date = self.SCHDATE if self.schedule.DELTA == 0:#seconds if (self.SCHDATE + timedelta(seconds=interval)) > self.time: break elif self.schedule.DELTA == 1:#minutes if (self.SCHDATE + timedelta(minutes=interval)) > self.time: break elif self.schedule.DELTA == 2:#hours if (self.SCHDATE + timedelta(hours=interval)) > self.time: break elif self.schedule.DELTA == 3:#days if (self.SCHDATE + timedelta(days=interval)) > self.time: break elif self.schedule.DELTA == 4:#weeks if (self.SCHDATE + timedelta(weeks=interval)) > self.time: break elif self.schedule.DELTA == 5:#months if temp + temp.mtimedelta(months=interval) > self.time: break elif self.schedule.DELTA == 6:#years if temp + temp.mtimedelta(years=interval) > self.time: break #if roll has not been set to 0 we try to roll self.find_next_date() else: break
def EndofNextMonth(self): new_date = datetime(1969, 7, 20, 8, 00, 00) resch_date = datetime.now() new_action = action(ACTIONID = 'UNITTEST0018', USERID = self.USERID) self.sess.add(new_action) self.sess.flush() new_job = job(ACTIONID = 'UNITTEST0018', SCHEDID = 'END OF NEXT MONTH', STATUS = 0, SCHDATE = new_date) self.sess.add(new_job) self.sess.flush() new_job.resch(None) m_date = mdatetime() m_date.date = m_date + m_date.mtimedelta(months=1) m_date.date = m_date.end_of_month() self.assert_(new_job.SCHDATE.strftime("%Y") == m_date.date.strftime("%Y"), "EndofMonth test Invalid Year") self.assert_(new_job.SCHDATE.strftime("%m") == m_date.date.strftime("%m"), "EndofMonth test Invalid Month") self.assert_(new_job.SCHDATE.strftime("%d") == m_date.date.strftime("%d"), "EndofMonth test Invalid Day")
def add(self): #Now we do the actual incrementation temp = mdatetime() temp.date = self.SCHDATE if self.schedule.METHOD == 0: #INTERVAL if self.schedule.DELTA == 0:#seconds self.SCHDATE = self.SCHDATE + timedelta(seconds=self.schedule.INTERVAL) elif self.schedule.DELTA == 1:#minutes self.SCHDATE = self.SCHDATE + timedelta(minutes=self.schedule.INTERVAL) elif self.schedule.DELTA == 2:#hours self.SCHDATE = self.SCHDATE + timedelta(hours=self.schedule.INTERVAL) elif self.schedule.DELTA == 3:#days self.SCHDATE = self.SCHDATE + timedelta(days=self.schedule.INTERVAL) elif self.schedule.DELTA == 4:#weeks self.SCHDATE = self.SCHDATE + timedelta(weeks=self.schedule.INTERVAL) elif self.schedule.DELTA == 5:#months self.SCHDATE = (temp + temp.mtimedelta(months=self.schedule.INTERVAL)) elif self.schedule.DELTA == 6:#years self.SCHDATE = (temp + temp.mtimedelta(years=self.schedule.INTERVAL)) elif self.schedule.METHOD == 1: # Absolute #if self.schedule.DELTA < 3: # log_error("Cannot use Absolute Method with a delta less than a day for schedule ", self.schedule.SCHEDID, ".") # self.set_unscheduled() # return #ABS # below code for controlled scheduling adds the next delta to the current time. # then based off of when you want it to reschedule it sets to beg or end of # that delta. there is an if for each delta. at the very end there is # the actual adding or subtracting of deltas to the base time found. # next_date = mdatetime() #gets a mdatetime for now next_date.date = self.time #we will check to see what the NEXT DELTA is set to. if self.schedule.NEXTDELTA == 0: #AFTER WEEK next_date.date = next_date + next_date.mtimedelta(weeks=1) if self.schedule.ABSWHEN == 0: # after beginning of next_date.date = next_date.begining_of_week() elif self.schedule.ABSWHEN == 1: # before end of next_date.date = next_date.end_of_week() elif self.schedule.ABSWHEN == 2: # before beginning of next_date.date = next_date.begining_of_week() else: log_error("Error rescheduling job ", self.schedule.SCHEDID, " ", self.JOBID, ".") self.set_unscheduled() elif self.schedule.NEXTDELTA == 1: #AFTER MONTH next_date.date = next_date + next_date.mtimedelta(months=1) if self.schedule.ABSWHEN == 0: # after beginning of next_date.date = next_date.begining_of_month() elif self.schedule.ABSWHEN == 1: # before end of next_date.date = next_date.end_of_month() elif self.schedule.ABSWHEN == 2: #before begin of next_date.date = next_date.begining_of_month() else: log_error("Error rescheduling job ", self.schedule.SCHEDID, " ", self.JOBID, ".") self.set_unscheduled() elif self.schedule.NEXTDELTA == 2: #NEXT YEAR next_date.date = next_date + next_date.mtimedelta(years=1) if self.schedule.ABSWHEN == 0: # after beginning of next_date.date = next_date.begining_of_year() elif self.schedule.ABSWHEN == 1: # before end of next_date.date = next_date.end_of_year() elif self.schedule.ABSWHEN == 2: # before beginning of next_date.date = next_date.begining_of_year() else: log_error("Error rescheduling job ", self.schedule.SCHEDID, " ", self.JOBID, ".") self.set_unscheduled() else: log_error("Error rescheduling job ", self.schedule.SCHEDID, " ", self.JOBID, ".") self.set_unscheduled() return #if when is 0 add , 1 is subtract isec = string.atoi(self.SCHDATE.strftime("%S")) imin = string.atoi(self.SCHDATE.strftime("%M")) ihour = string.atoi(self.SCHDATE.strftime("%H")) if (self.schedule.ABSWHEN == 0): if self.schedule.DELTA == 0:#seconds self.SCHDATE = next_date.date + timedelta(seconds=self.schedule.INTERVAL) elif self.schedule.DELTA == 1:#minutes self.SCHDATE = next_date.date + timedelta(minutes=self.schedule.INTERVAL) elif self.schedule.DELTA == 2:#hours self.SCHDATE = next_date.date + timedelta(hours=self.schedule.INTERVAL) elif self.schedule.DELTA == 3:#days self.SCHDATE = next_date.date + timedelta(days=self.schedule.INTERVAL) elif self.schedule.DELTA == 4:#weeks self.SCHDATE = next_date.date + timedelta(weeks=self.schedule.INTERVAL) elif self.schedule.DELTA == 5:#months self.SCHDATE = (next_date + next_date.mtimedelta(months=self.schedule.INTERVAL)) elif self.schedule.DELTA == 6:#years self.SCHDATE = (next_date + next_date.mtimedelta(years=self.schedule.INTERVAL)) elif (self.schedule.ABSWHEN == 1): if self.schedule.DELTA == 0:#seconds self.SCHDATE = next_date.date - timedelta(seconds=self.schedule.INTERVAL) elif self.schedule.DELTA == 1:#minutes self.SCHDATE = next_date.date - timedelta(minutes=self.schedule.INTERVAL) elif self.schedule.DELTA == 2:#hours self.SCHDATE = next_date.date - timedelta(hours=self.schedule.INTERVAL) elif self.schedule.DELTA == 3:#days self.SCHDATE = next_date.date - timedelta(days=self.schedule.INTERVAL) elif self.schedule.DELTA == 4:#weeks self.SCHDATE = next_date.date - timedelta(weeks=self.schedule.INTERVAL) elif self.schedule.DELTA == 5:#months self.SCHDATE = (next_date - next_date.mtimedelta(months=self.schedule.INTERVAL)) elif self.schedule.DELTA == 6:#years self.SCHDATE = (next_date - next_date.mtimedelta(years=self.schedule.INTERVAL)) elif (self.schedule.ABSWHEN == 2): if self.schedule.DELTA == 0:#seconds self.SCHDATE = next_date.date - timedelta(seconds=self.schedule.INTERVAL) elif self.schedule.DELTA == 1:#minutes self.SCHDATE = next_date.date - timedelta(minutes=self.schedule.INTERVAL) elif self.schedule.DELTA == 2:#hours self.SCHDATE = next_date.date - timedelta(hours=self.schedule.INTERVAL) elif self.schedule.DELTA == 3:#days self.SCHDATE = next_date.date - timedelta(days=self.schedule.INTERVAL) elif self.schedule.DELTA == 4:#weeks self.SCHDATE = next_date.date - timedelta(weeks=self.schedule.INTERVAL) elif self.schedule.DELTA == 5:#months self.SCHDATE = (next_date - next_date.mtimedelta(months=self.schedule.INTERVAL)) elif self.schedule.DELTA == 6:#years self.SCHDATE = (next_date - next_date.mtimedelta(years=self.schedule.INTERVAL)) else: log_error("Error rescheduling job ", self.schedule.SCHEDID, " ", self.JOBID, ".") self.set_unscheduled() #replace new date with original time iday = string.atoi(self.SCHDATE.strftime("%d")) imonth = string.atoi(self.SCHDATE.strftime("%m")) iyear = string.atoi(self.SCHDATE.strftime("%Y")) self.SCHDATE = self.SCHDATE.replace(year=iyear, month=imonth, day=iday, hour=ihour, minute=imin, second=isec) elif self.schedule.METHOD == 2: try: daysinweek = [] if self.schedule.MON: daysinweek.append(0) if self.schedule.TUE: daysinweek.append(1) if self.schedule.WED: daysinweek.append(2) if self.schedule.THU: daysinweek.append(3) if self.schedule.FRI: daysinweek.append(4) if self.schedule.SAT: daysinweek.append(5) if self.schedule.SUN: daysinweek.append(6) if len(daysinweek) == 0: self.set_unscheduled() else: while(1): self.SCHDATE = self.SCHDATE + timedelta(days = 1) if self.SCHDATE.weekday() in daysinweek: break except Exception, e: print e