|  | @@ -8,6 +8,128 @@ This document contains change notes for bugfix releases in
 | 
	
		
			
				|  |  |  the 4.0.x series (latentcall), please see :ref:`whatsnew-4.0` for
 | 
	
		
			
				|  |  |  an overview of what's new in Celery 4.0.
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +.. _version-4.0.1:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +4.0.1
 | 
	
		
			
				|  |  | +=====
 | 
	
		
			
				|  |  | +:release-date: TBA
 | 
	
		
			
				|  |  | +:release-by: Ask Solem
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Tasks**: Added new method to register class-based tasks (Issue #3615).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    To register a class based task you should now call ``app.register_task``:
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    .. code-block:: python
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        from celery import Celery, Task
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        app = Celery()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        class CustomTask(Task):
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            def run(self):
 | 
	
		
			
				|  |  | +                return 'hello'
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        app.register_task(CustomTask())
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Tasks**: The ``task-sent`` event was not being sent even if
 | 
	
		
			
				|  |  | +  configured to do so (Issue #3646).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Worker**: Fixed AMQP heartbeat support for eventlet/gevent pools
 | 
	
		
			
				|  |  | +  (Issue #3649).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **App**: ``app.conf.humanize()`` would not work if configuration
 | 
	
		
			
				|  |  | +  not finalized (Issue #3652).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Utils**: ``saferepr`` attempted to show iterables as lists
 | 
	
		
			
				|  |  | +  and mappings as dicts.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +_ **Utils**: ``saferepr`` did not handle unicode-errors
 | 
	
		
			
				|  |  | +  when attempting to format ``bytes`` on Python 3 (Issue #3610).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Utils**: ``saferepr`` should now properly represent byte strings
 | 
	
		
			
				|  |  | +  with non-ascii characters (Issue #3600).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Results**: Fixed bug in elasticsearch where _index method missed
 | 
	
		
			
				|  |  | +  the body argument (Issue #3606).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Fix contributed by **何翔宇** (Sean Ho).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Canvas**: Fixed :exc:`ValueError` in chord with single task header
 | 
	
		
			
				|  |  | +  (Issue #3608).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Fix contributed by **Viktor Holmqvist**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Task**: Ensure class-based task has name prior to registration
 | 
	
		
			
				|  |  | +  (Issue #3616).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Fix contributed by **Rick Wargo**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Beat**: Fixed problem with strings in shelve (Issue #3644).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Fix contributed by **Alli**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Worker**: Fixed :exc:`KeyError` in ``inspect stats`` when ``-O`` argument
 | 
	
		
			
				|  |  | +  set to something other than ``fast`` or ``fair`` (Issue #3621).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Task**: Retried tasks were no longer sent to the original queue
 | 
	
		
			
				|  |  | +  (Issue #3622).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Worker**: Python 3: Fixed None/int type comparison in
 | 
	
		
			
				|  |  | +  :file:`apps/worker.py` (Issue #3631).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Results**: Redis has a new :setting:`redis_socket_connect_timeout`
 | 
	
		
			
				|  |  | +  setting.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Results**: Redis result backend passed the ``socket_connect_timeout``
 | 
	
		
			
				|  |  | +  argument to UNIX socket based connections by mistake, causing a crash.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Worker**: Fixed missing logo in worker splash screen when running on
 | 
	
		
			
				|  |  | +  Python 3.x (Issue #3627).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Fix contributed by **Brian Luan**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Deps**: Fixed ``celery[redis]`` bundle installation (Issue #3643).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Fix contributed by **Rémi Marenco**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Deps**: Bundle ``celery[sqs]`` now also requires :pypi:`pycurl`
 | 
	
		
			
				|  |  | +  (Issue #3619).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Worker**: Hard time limits were no longer being respected (Issue #3618).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Worker**: Soft time limit log showed ``Trues`` instead of the number
 | 
	
		
			
				|  |  | +  of seconds.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **App**: ``registry_cls`` argument no longer had any effect (Issue #3613).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Worker**: Event producer now uses ``connection_for_Write`` (Issue #3525).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Results**: Redis/memcache backends now uses :setting:`result_expires`
 | 
	
		
			
				|  |  | +  to expire chord counter (Issue #3573).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Contributed by **Tayfun Sen**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Django**: Fixed command for upgrading settings with Django (Issue #3563).
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Fix contributed by **François Voron**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- **Testing**: Added a ``celery_parameters`` test fixture to be able to use
 | 
	
		
			
				|  |  | +  customized ``Celery`` init parameters. (#3626)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    Contributed by **Steffen Allner**.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +- Documentation improvements contributed by
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    - :github_user:`csfeathers`
 | 
	
		
			
				|  |  | +    - **Moussa Taifi**
 | 
	
		
			
				|  |  | +    - **Yuhannaa**
 | 
	
		
			
				|  |  | +    - **Laurent Peuch**
 | 
	
		
			
				|  |  | +    - **Christian**
 | 
	
		
			
				|  |  | +    - **Bruno Alla**
 | 
	
		
			
				|  |  | +    - **Steven Johns**
 | 
	
		
			
				|  |  | +    - :github_user:`tnir`
 | 
	
		
			
				|  |  | +    - **GDR!**
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  .. _version-4.0.0:
 | 
	
		
			
				|  |  |  
 |