|  | @@ -30,6 +30,9 @@ from . import routes as _routes
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  __all__ = ['AMQP', 'Queues', 'TaskProducer', 'TaskConsumer']
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +#: earliest date supported by time.mktime.
 | 
	
		
			
				|  |  | +INT_MIN = -2147483648
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  #: Human readable queue declaration.
 | 
	
		
			
				|  |  |  QUEUE_FORMAT = """
 | 
	
		
			
				|  |  |  .> {0.name:<16} exchange={0.exchange.name}({0.exchange.type}) \
 | 
	
	
		
			
				|  | @@ -253,11 +256,13 @@ class TaskProducer(Producer):
 | 
	
		
			
				|  |  |          if not isinstance(task_kwargs, dict):
 | 
	
		
			
				|  |  |              raise ValueError('task kwargs must be a dictionary')
 | 
	
		
			
				|  |  |          if countdown:  # Convert countdown to ETA.
 | 
	
		
			
				|  |  | +            self._verify_seconds(countdown, 'countdown')
 | 
	
		
			
				|  |  |              now = now or self.app.now()
 | 
	
		
			
				|  |  |              eta = now + timedelta(seconds=countdown)
 | 
	
		
			
				|  |  |              if self.utc:
 | 
	
		
			
				|  |  |                  eta = to_utc(eta).astimezone(self.app.timezone)
 | 
	
		
			
				|  |  |          if isinstance(expires, numbers.Real):
 | 
	
		
			
				|  |  | +            self._verify_seconds(expires, 'expires')
 | 
	
		
			
				|  |  |              now = now or self.app.now()
 | 
	
		
			
				|  |  |              expires = now + timedelta(seconds=expires)
 | 
	
		
			
				|  |  |              if self.utc:
 | 
	
	
		
			
				|  | @@ -338,6 +343,11 @@ class TaskProducer(Producer):
 | 
	
		
			
				|  |  |          return task_id
 | 
	
		
			
				|  |  |      delay_task = publish_task   # XXX Compat
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    def _verify_seconds(self, s, what):
 | 
	
		
			
				|  |  | +        if s < INT_MIN:
 | 
	
		
			
				|  |  | +            raise ValueError('%s is out of range: %r' % (what, s))
 | 
	
		
			
				|  |  | +        return s
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |      @cached_property
 | 
	
		
			
				|  |  |      def event_dispatcher(self):
 | 
	
		
			
				|  |  |          # We call Dispatcher.publish with a custom producer
 |