Example #1
0
	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.")
Example #2
0
	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)
Example #3
0
	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)
Example #4
0
	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
Example #5
0
	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")
Example #6
0
	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