|  | @@ -714,12 +714,34 @@ class PeriodicTask(Task):
 | 
	
		
			
				|  |  |          return False, rem
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      def delta_resolution(self, dt, delta):
 | 
	
		
			
				|  |  | -        resolution = {3: lambda x: x / 86400,
 | 
	
		
			
				|  |  | -                      4: lambda x: x / 3600,
 | 
	
		
			
				|  |  | -                      5: lambda x: x / 60}
 | 
	
		
			
				|  |  | +        """Round a datetime to the resolution of a timedelta.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        If the timedelta is in days, the datetime will be rounded
 | 
	
		
			
				|  |  | +        to the nearest days, if the timedelta is in hours the datetime
 | 
	
		
			
				|  |  | +        will be rounded to the nearest hour, and so on until seconds
 | 
	
		
			
				|  |  | +        which will just return the original datetime.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            >>> now = datetime.now()
 | 
	
		
			
				|  |  | +            >>> now
 | 
	
		
			
				|  |  | +            datetime.datetime(2010, 3, 30, 11, 50, 58, 41065)
 | 
	
		
			
				|  |  | +            >>> delta_resolution(now, timedelta(days=2))
 | 
	
		
			
				|  |  | +            datetime.datetime(2010, 3, 30, 0, 0)
 | 
	
		
			
				|  |  | +            >>> delta_resolution(now, timedelta(hours=2))
 | 
	
		
			
				|  |  | +            datetime.datetime(2010, 3, 30, 11, 0)
 | 
	
		
			
				|  |  | +            >>> delta_resolution(now, timedelta(minutes=2))
 | 
	
		
			
				|  |  | +            datetime.datetime(2010, 3, 30, 11, 50)
 | 
	
		
			
				|  |  | +            >>> delta_resolution(now, timedelta(seconds=2))
 | 
	
		
			
				|  |  | +            datetime.datetime(2010, 3, 30, 11, 50, 58, 41065)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        """
 | 
	
		
			
				|  |  | +        delta = self.timedelta_seconds(delta)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        resolutions = ((3, lambda x: x / 86400),
 | 
	
		
			
				|  |  | +                       (4, lambda x: x / 3600),
 | 
	
		
			
				|  |  | +                       (5, lambda x: x / 60))
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          args = dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second
 | 
	
		
			
				|  |  | -        r = None
 | 
	
		
			
				|  |  | -        for res, predicate in resolution.items():
 | 
	
		
			
				|  |  | -            if predicate(self.timedelta_seconds(delta)):
 | 
	
		
			
				|  |  | -                r = res
 | 
	
		
			
				|  |  | -        return datetime(*args[:r])
 | 
	
		
			
				|  |  | +        for res, predicate in resolutions:
 | 
	
		
			
				|  |  | +            if predicate(delta) >= 1.0:
 | 
	
		
			
				|  |  | +                return datetime(*args[:res])
 | 
	
		
			
				|  |  | +        return dt
 |