Browse Source

Documentation improvements

Ask Solem 8 years ago
parent
commit
9591b3c3dd

+ 22 - 27
CONTRIBUTING.rst

@@ -583,10 +583,10 @@ Installing the dependencies:
 
     $ pip install -U -r requirements/pkgutils.txt
 
-pyflakes & PEP8
-~~~~~~~~~~~~~~~
+pyflakes & PEP-8
+~~~~~~~~~~~~~~~~
 
-To ensure that your changes conform to PEP8 and to run pyflakes
+To ensure that your changes conform to ``8`` and to run pyflakes
 execute:
 ::
 
@@ -659,15 +659,12 @@ You should probably be able to pick up the coding style
 from surrounding code, but it is a good idea to be aware of the
 following conventions.
 
-* All Python code must follow the `PEP-8`_ guidelines.
+* All Python code must follow the ``8`` guidelines.
 
-`pep8.py`_ is an utility you can use to verify that your code
+``pep8`` is a utility you can use to verify that your code
 is following the conventions.
 
-.. _`PEP-8`: http://www.python.org/dev/peps/pep-0008/
-.. _`pep8.py`: http://pypi.python.org/pypi/pep8
-
-* Docstrings must follow the `PEP-257`_ conventions, and use the following
+* Docstrings must follow the ``257`` conventions, and use the following
   style.
 
     Do this:
@@ -695,8 +692,6 @@ is following the conventions.
             Short description.
             """
 
-.. _`PEP-257`: http://www.python.org/dev/peps/pep-0257/
-
 * Lines shouldn't exceed 78 columns.
 
   You can enforce this in ``vim`` by setting the ``textwidth`` option:
@@ -917,7 +912,7 @@ Packages
 :git: https://github.com/celery/celery
 :CI: http://travis-ci.org/#!/celery/celery
 :Windows-CI: https://ci.appveyor.com/project/ask/celery
-:PyPI: http://pypi.python.org/pypi/celery
+:PyPI: ``celery``
 :docs: http://docs.celeryproject.org
 
 ``kombu``
@@ -928,7 +923,7 @@ Messaging library.
 :git: https://github.com/celery/kombu
 :CI: http://travis-ci.org/#!/celery/kombu
 :Windows-CI: https://ci.appveyor.com/project/ask/kombu
-:PyPI: http://pypi.python.org/pypi/kombu
+:PyPI: ``kombu``
 :docs: https://kombu.readthedocs.io
 
 ``amqp``
@@ -939,7 +934,7 @@ Python AMQP 0.9.1 client.
 :git: https://github.com/celery/py-amqp
 :CI: http://travis-ci.org/#!/celery/py-amqp
 :Windows-CI: https://ci.appveyor.com/project/ask/py-amqp
-:PyPI: http://pypi.python.org/pypi/amqp
+:PyPI: ``amqp``
 :docs: https://amqp.readthedocs.io
 
 ``vine``
@@ -950,7 +945,7 @@ Promise/deferred implementation.
 :git: https://github.com/celery/vine/
 :CI: http://travis-ci.org/#!/celery/vine/
 :Windows-CI: https://ci.appveyor.com/project/ask/vine
-:PyPI: http://pypi.python.org/pypi/vine
+:PyPI: ``vine``
 :docs: https://vine.readthedocs.io
 
 ``billiard``
@@ -962,7 +957,7 @@ that'll eventually be merged into the Python stdlib.
 :git: https://github.com/celery/billiard
 :CI: http://travis-ci.org/#!/celery/billiard/
 :Windows-CI: https://ci.appveyor.com/project/ask/billiard
-:PyPI: http://pypi.python.org/pypi/billiard
+:PyPI: ``billiard``
 
 ``librabbitmq``
 ---------------
@@ -970,7 +965,7 @@ that'll eventually be merged into the Python stdlib.
 Very fast Python AMQP client written in C.
 
 :git: https://github.com/celery/librabbitmq
-:PyPI: http://pypi.python.org/pypi/librabbitmq
+:PyPI: ``librabbitmq``
 
 ``django-celery``
 -----------------
@@ -978,7 +973,7 @@ Very fast Python AMQP client written in C.
 Django <-> Celery Integration.
 
 :git: https://github.com/celery/django-celery
-:PyPI: http://pypi.python.org/pypi/django-celery
+:PyPI: ``django-celery``
 :docs: http://docs.celeryproject.org/en/latest/django
 
 ``cell``
@@ -987,7 +982,7 @@ Django <-> Celery Integration.
 Actor library.
 
 :git: https://github.com/celery/cell
-:PyPI: http://pypi.python.org/pypi/cell
+:PyPI: ``cell``
 
 ``cyme``
 --------
@@ -995,7 +990,7 @@ Actor library.
 Distributed Celery Instance manager.
 
 :git: https://github.com/celery/cyme
-:PyPI: http://pypi.python.org/pypi/cyme
+:PyPI: ``cyme``
 :docs: https://cyme.readthedocs.io/
 
 
@@ -1005,39 +1000,39 @@ Deprecated
 - ``Flask-Celery``
 
 :git: https://github.com/ask/Flask-Celery
-:PyPI: http://pypi.python.org/pypi/Flask-Celery
+:PyPI: ``Flask-Celery``
 
 - ``celerymon``
 
 :git: https://github.com/celery/celerymon
-:PyPI: http://pypi.python.org/pypi/celerymon
+:PyPI: ``celerymon``
 
 - ``carrot``
 
 :git: https://github.com/ask/carrot
-:PyPI: http://pypi.python.org/pypi/carrot
+:PyPI: ``carrot``
 
 - ``ghettoq``
 
 :git: https://github.com/ask/ghettoq
-:PyPI: http://pypi.python.org/pypi/ghettoq
+:PyPI: ``ghettoq``
 
 - ``kombu-sqlalchemy``
 
 :git: https://github.com/ask/kombu-sqlalchemy
-:PyPI: http://pypi.python.org/pypi/kombu-sqlalchemy
+:PyPI: ``kombu-sqlalchemy``
 
 - ``django-kombu``
 
 :git: https://github.com/ask/django-kombu
-:PyPI: http://pypi.python.org/pypi/django-kombu
+:PyPI: ``django-kombu``
 
 - ``pylibrabbitmq``
 
 Old name for ``librabbitmq``.
 
 :git: ``None``
-:PyPI: http://pypi.python.org/pypi/pylibrabbitmq
+:PyPI: ``pylibrabbitmq``
 
 .. _release-procedure:
 

+ 3 - 7
README.rst

@@ -219,16 +219,11 @@ Installation
 You can install Celery either via the Python Package Index (PyPI)
 or from source.
 
-To install using `pip`,:
+To install using ``pip``:
 ::
 
     $ pip install -U Celery
 
-To install using `easy_install`,:
-::
-
-    $ easy_install -U Celery
-
 .. _bundles:
 
 Bundles
@@ -322,7 +317,8 @@ Transports and Backends
 Downloading and installing from source
 --------------------------------------
 
-Download the latest version of Celery from
+Download the latest version of Celery from PyPI:
+
 http://pypi.python.org/pypi/celery/
 
 You can install it by doing the following,:

+ 1 - 1
celery/tests/tasks/test_tasks.py

@@ -374,7 +374,7 @@ class test_tasks(TasksCase):
                 consumer, sresult, self.mytask.name, name='Elaine M. Benes',
             )
 
-            # With eta.
+            # With ETA.
             presult2 = self.mytask.apply_async(
                 kwargs=dict(name='George Costanza'),
                 eta=self.now() + timedelta(days=1),

+ 1 - 1
celery/tests/worker/test_worker.py

@@ -809,7 +809,7 @@ class test_WorkController(AppCase):
         xargs = self.comp_logger.debug.call_args[0]
         fmt, arg = xargs[0], xargs[1]
         self.assertEqual(30.0, arg)
-        self.assertIn('Next eta %s secs', fmt)
+        self.assertIn('Next ETA %s secs', fmt)
 
     def test_process_task(self):
         worker = self.worker

+ 1 - 1
celery/worker/components.py

@@ -51,7 +51,7 @@ class Timer(bootsteps.Step):
         logger.error('Timer error: %r', exc, exc_info=True)
 
     def on_timer_tick(self, delay):
-        logger.debug('Timer wake-up! Next eta %s secs.', delay)
+        logger.debug('Timer wake-up! Next ETA %s secs.', delay)
 
 
 class Hub(bootsteps.StartStopStep):

+ 2 - 2
celery/worker/request.py

@@ -128,7 +128,7 @@ class Request(object):
                 eta = maybe_iso8601(eta)
             except (AttributeError, ValueError, TypeError) as exc:
                 raise InvalidTaskError(
-                    'invalid eta value {0!r}: {1}'.format(eta, exc))
+                    'invalid ETA value {0!r}: {1}'.format(eta, exc))
             self.eta = maybe_make_aware(eta, self.tzlocal)
         else:
             self.eta = None
@@ -405,7 +405,7 @@ class Request(object):
     def __str__(self):
         return ' '.join([
             self.humaninfo(),
-            ' eta:[{0}]'.format(self.eta) if self.eta else '',
+            ' ETA:[{0}]'.format(self.eta) if self.eta else '',
             ' expires:[{0}]'.format(self.expires) if self.expires else '',
         ])
 

+ 1 - 1
celery/worker/strategy.py

@@ -114,7 +114,7 @@ def default(task, app, consumer,
                 else:
                     eta = to_timestamp(req.eta, timezone.local)
             except OverflowError as exc:
-                error("Couldn't convert eta %s to timestamp: %r. Task: %r",
+                error("Couldn't convert ETA %r to timestamp: %r. Task: %r",
                       req.eta, exc, req.info(safe=True), exc_info=True)
                 req.acknowledge()
             else:

+ 22 - 27
docs/contributing.rst

@@ -600,10 +600,10 @@ Installing the dependencies:
 
     $ pip install -U -r requirements/pkgutils.txt
 
-pyflakes & PEP8
-~~~~~~~~~~~~~~~
+pyflakes & PEP-8
+~~~~~~~~~~~~~~~~
 
-To ensure that your changes conform to PEP8 and to run pyflakes
+To ensure that your changes conform to :pep:`8` and to run pyflakes
 execute:
 
 .. code-block:: console
@@ -683,15 +683,12 @@ You should probably be able to pick up the coding style
 from surrounding code, but it is a good idea to be aware of the
 following conventions.
 
-* All Python code must follow the `PEP-8`_ guidelines.
+* All Python code must follow the :pep:`8` guidelines.
 
-`pep8.py`_ is an utility you can use to verify that your code
+:pypi:`pep8` is a utility you can use to verify that your code
 is following the conventions.
 
-.. _`PEP-8`: http://www.python.org/dev/peps/pep-0008/
-.. _`pep8.py`: http://pypi.python.org/pypi/pep8
-
-* Docstrings must follow the `PEP-257`_ conventions, and use the following
+* Docstrings must follow the :pep:`257` conventions, and use the following
   style.
 
     Do this:
@@ -722,8 +719,6 @@ is following the conventions.
             Short description.
             """
 
-.. _`PEP-257`: http://www.python.org/dev/peps/pep-0257/
-
 * Lines shouldn't exceed 78 columns.
 
   You can enforce this in :command:`vim` by setting the ``textwidth`` option:
@@ -950,7 +945,7 @@ Packages
 :git: https://github.com/celery/celery
 :CI: http://travis-ci.org/#!/celery/celery
 :Windows-CI: https://ci.appveyor.com/project/ask/celery
-:PyPI: http://pypi.python.org/pypi/celery
+:PyPI: :pypi:`celery`
 :docs: http://docs.celeryproject.org
 
 ``kombu``
@@ -961,7 +956,7 @@ Messaging library.
 :git: https://github.com/celery/kombu
 :CI: http://travis-ci.org/#!/celery/kombu
 :Windows-CI: https://ci.appveyor.com/project/ask/kombu
-:PyPI: http://pypi.python.org/pypi/kombu
+:PyPI: :pypi:`kombu`
 :docs: https://kombu.readthedocs.io
 
 ``amqp``
@@ -972,7 +967,7 @@ Python AMQP 0.9.1 client.
 :git: https://github.com/celery/py-amqp
 :CI: http://travis-ci.org/#!/celery/py-amqp
 :Windows-CI: https://ci.appveyor.com/project/ask/py-amqp
-:PyPI: http://pypi.python.org/pypi/amqp
+:PyPI: :pypi:`amqp`
 :docs: https://amqp.readthedocs.io
 
 ``vine``
@@ -983,7 +978,7 @@ Promise/deferred implementation.
 :git: https://github.com/celery/vine/
 :CI: http://travis-ci.org/#!/celery/vine/
 :Windows-CI: https://ci.appveyor.com/project/ask/vine
-:PyPI: http://pypi.python.org/pypi/vine
+:PyPI: :pypi:`vine`
 :docs: https://vine.readthedocs.io
 
 ``billiard``
@@ -995,7 +990,7 @@ that'll eventually be merged into the Python stdlib.
 :git: https://github.com/celery/billiard
 :CI: http://travis-ci.org/#!/celery/billiard/
 :Windows-CI: https://ci.appveyor.com/project/ask/billiard
-:PyPI: http://pypi.python.org/pypi/billiard
+:PyPI: :pypi:`billiard`
 
 ``librabbitmq``
 ---------------
@@ -1003,7 +998,7 @@ that'll eventually be merged into the Python stdlib.
 Very fast Python AMQP client written in C.
 
 :git: https://github.com/celery/librabbitmq
-:PyPI: http://pypi.python.org/pypi/librabbitmq
+:PyPI: :pypi:`librabbitmq`
 
 ``django-celery``
 -----------------
@@ -1011,7 +1006,7 @@ Very fast Python AMQP client written in C.
 Django <-> Celery Integration.
 
 :git: https://github.com/celery/django-celery
-:PyPI: http://pypi.python.org/pypi/django-celery
+:PyPI: :pypi:`django-celery`
 :docs: http://docs.celeryproject.org/en/latest/django
 
 ``cell``
@@ -1020,7 +1015,7 @@ Django <-> Celery Integration.
 Actor library.
 
 :git: https://github.com/celery/cell
-:PyPI: http://pypi.python.org/pypi/cell
+:PyPI: :pypi:`cell`
 
 ``cyme``
 --------
@@ -1028,7 +1023,7 @@ Actor library.
 Distributed Celery Instance manager.
 
 :git: https://github.com/celery/cyme
-:PyPI: http://pypi.python.org/pypi/cyme
+:PyPI: :pypi:`cyme`
 :docs: https://cyme.readthedocs.io/
 
 
@@ -1038,39 +1033,39 @@ Deprecated
 - ``Flask-Celery``
 
 :git: https://github.com/ask/Flask-Celery
-:PyPI: http://pypi.python.org/pypi/Flask-Celery
+:PyPI: :pypi:`Flask-Celery`
 
 - ``celerymon``
 
 :git: https://github.com/celery/celerymon
-:PyPI: http://pypi.python.org/pypi/celerymon
+:PyPI: :pypi:`celerymon`
 
 - ``carrot``
 
 :git: https://github.com/ask/carrot
-:PyPI: http://pypi.python.org/pypi/carrot
+:PyPI: :pypi:`carrot`
 
 - ``ghettoq``
 
 :git: https://github.com/ask/ghettoq
-:PyPI: http://pypi.python.org/pypi/ghettoq
+:PyPI: :pypi:`ghettoq`
 
 - ``kombu-sqlalchemy``
 
 :git: https://github.com/ask/kombu-sqlalchemy
-:PyPI: http://pypi.python.org/pypi/kombu-sqlalchemy
+:PyPI: :pypi:`kombu-sqlalchemy`
 
 - ``django-kombu``
 
 :git: https://github.com/ask/django-kombu
-:PyPI: http://pypi.python.org/pypi/django-kombu
+:PyPI: :pypi:`django-kombu`
 
 - ``pylibrabbitmq``
 
 Old name for :pypi:`librabbitmq`.
 
 :git: :const:`None`
-:PyPI: http://pypi.python.org/pypi/pylibrabbitmq
+:PyPI: :pypi:`pylibrabbitmq`
 
 .. _release-procedure:
 

+ 0 - 4
docs/django/first-steps-with-django.rst

@@ -190,10 +190,6 @@ To use this with your project you need to follow these four steps:
     add this directly into your settings module (without the
     ``app.conf.update`` part)
 
-
-
-.. _south: http://pypi.python.org/pypi/South/
-
 .. admonition:: Relative Imports
 
     You have to be consistent in how you import the task module, e.g. if

+ 4 - 12
docs/faq.rst

@@ -82,7 +82,7 @@ the current list of dependencies are:
 celery
 ~~~~~~
 
-- `kombu`_
+- :pypi:`kombu`
 
 Kombu is part of the Celery ecosystem and is the library used
 to send and receive messages. It's also the library that enables
@@ -90,9 +90,7 @@ us to support many different message brokers. It's also used by the
 OpenStack project, and many others, validating the choice to separate
 it from the Celery code-base.
 
-.. _`kombu`: http://pypi.python.org/pypi/kombu
-
-- `billiard`_
+- :pypi:`billiard`
 
 Billiard is a fork of the Python multiprocessing module containing
 many performance and stability improvements. It's an eventual goal
@@ -101,14 +99,10 @@ that these improvements will be merged back into Python one day.
 It's also used for compatibility with older Python versions
 that don't come with the multiprocessing module.
 
-.. _`billiard`: http://pypi.python.org/pypi/billiard
-
-- `pytz`
+- :pypi:`pytz`
 
 The pytz module provides timezone definitions and related tools.
 
-.. _`pytz`: http://pypi.python.org/pypi/pytz
-
 ``django-celery``
 ~~~~~~~~~~~~~~~~~
 
@@ -122,13 +116,11 @@ kombu
 
 Kombu depends on the following packages:
 
-- `amqp`_
+- :pypi:`amqp`
 
 The underlying pure-Python amqp client implementation. AMQP being the default
 broker this is a natural dependency.
 
-.. _`amqp`: http://pypi.python.org/pypi/amqp
-
 .. note::
 
     To handle the dependencies for popular configuration

+ 2 - 4
docs/getting-started/brokers/sqs.rst

@@ -9,15 +9,13 @@
 Installation
 ============
 
-For the Amazon SQS support you have to install the `boto`_ library:
+For the Amazon SQS support you have to install the :pypi:`boto`
+library using :command:`pip`:
 
 .. code-block:: console
 
     $ pip install -U boto
 
-.. _boto:
-    http://pypi.python.org/pypi/boto
-
 .. _broker-sqs-configuration:
 
 Configuration

+ 5 - 9
docs/getting-started/introduction.rst

@@ -217,17 +217,17 @@ Celery is easy to integrate with web frameworks, some of which even have
 integration packages:
 
     +--------------------+------------------------+
-    | `Django`_          | `django-celery`_       |
+    | `Django`_          | :pypi:`django-celery`  |
     +--------------------+------------------------+
-    | `Pyramid`_         | `pyramid_celery`_      |
+    | `Pyramid`_         | :pypi:`pyramid_celery` |
     +--------------------+------------------------+
-    | `Pylons`_          | `celery-pylons`_       |
+    | `Pylons`_          | :pypi:`celery-pylons`  |
     +--------------------+------------------------+
     | `Flask`_           | not needed             |
     +--------------------+------------------------+
-    | `web2py`_          | `web2py-celery`_       |
+    | `web2py`_          | :pypi:`web2py-celery`  |
     +--------------------+------------------------+
-    | `Tornado`_         | `tornado-celery`_      |
+    | `Tornado`_         | :pypi:`tornado-celery` |
     +--------------------+------------------------+
 
 The integration packages aren't strictly necessary, but they can make
@@ -240,10 +240,6 @@ database connections at :manpage:`fork(2)`.
 .. _`web2py`: http://web2py.com/
 .. _`Bottle`: http://bottlepy.org/
 .. _`Pyramid`: http://docs.pylonsproject.org/en/latest/docs/pyramid.html
-.. _`pyramid_celery`: http://pypi.python.org/pypi/pyramid_celery/
-.. _`django-celery`: http://pypi.python.org/pypi/django-celery
-.. _`celery-pylons`: http://pypi.python.org/pypi/celery-pylons
-.. _`web2py-celery`: http://code.google.com/p/web2py-celery/
 .. _`Tornado`: http://www.tornadoweb.org/
 .. _`tornado-celery`: https://github.com/mher/tornado-celery/
 

+ 5 - 0
docs/glossary.rst

@@ -40,6 +40,11 @@ Glossary
     late ack
         Short for :term:`late acknowledgment`
 
+    ETA
+        "Estimated Time of Arrival", in Celery and Google Task Queue, etc.,
+        used as the term for a delayed message that should not be processed
+        until the specified ETA time.  See :ref:`calling-eta`.
+
     request
         Task messages are converted to *requests* within the worker.
         The request information is also available as the task's

+ 41 - 41
docs/history/changelog-1.0.rst

@@ -11,7 +11,7 @@
 
 1.0.6
 =====
-:release-date: 2010-06-30 09:57 A.M CEST
+:release-date: 2010-06-30 09:57 a.m. CEST
 :release-by: Ask Solem
 
 * RabbitMQ 1.8.0 has extended their exchange equivalence tests to
@@ -34,7 +34,7 @@
 
 1.0.5
 =====
-:release-date: 2010-06-01 02:36 P.M CEST
+:release-date: 2010-06-01 02:36 p.m. CEST
 :release-by: Ask Solem
 
 .. _v105-critical:
@@ -96,7 +96,7 @@ Changes
 
 1.0.4
 =====
-:release-date: 2010-05-31 09:54 A.M CEST
+:release-date: 2010-05-31 09:54 a.m. CEST
 :release-by: Ask Solem
 
 * Changelog merged with 1.0.5 as the release was never announced.
@@ -105,7 +105,7 @@ Changes
 
 1.0.3
 =====
-:release-date: 2010-05-15 03:00 P.M CEST
+:release-date: 2010-05-15 03:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v103-important:
@@ -370,7 +370,7 @@ Fixes
 
 1.0.2
 =====
-:release-date: 2010-03-31 12:50 P.M CET
+:release-date: 2010-03-31 12:50 p.m. CET
 :release-by: Ask Solem
 
 * Deprecated: :setting:`CELERY_BACKEND`, please use
@@ -459,7 +459,7 @@ Fixes
 
 1.0.1
 =====
-:release-date: 2010-02-24 07:05 P.M CET
+:release-date: 2010-02-24 07:05 p.m. CET
 :release-by: Ask Solem
 
 * Tasks are now acknowledged early instead of late.
@@ -518,7 +518,7 @@ Fixes
 * Execution: `.messaging.TaskPublisher.send_task` now
   incorporates all the functionality apply_async previously did.
 
-    Like converting countdowns to eta, so :func:`celery.execute.apply_async` is
+    Like converting countdowns to ETA, so :func:`celery.execute.apply_async` is
     now simply a convenient front-end to
     :meth:`celery.messaging.TaskPublisher.send_task`, using
     the task classes default options.
@@ -575,7 +575,7 @@ Fixes
 * The ETA scheduler now deletes any revoked tasks it might encounter.
 
     As revokes aren't yet persistent, this is done to make sure the task
-    is revoked even though it's currently being hold because its eta is e.g.
+    is revoked even though it's currently being hold because its ETA is e.g.
     a week into the future.
 
 * The `task_id` argument is now respected even if the task is executed
@@ -625,7 +625,7 @@ Fixes
 
 1.0.0
 =====
-:release-date: 2010-02-10 04:00 P.M CET
+:release-date: 2010-02-10 04:00 p.m. CET
 :release-by: Ask Solem
 
 .. _v100-incompatible:
@@ -901,7 +901,7 @@ Changes
 
 * Now using a proper scheduler for the tasks with an ETA.
 
-    This means waiting eta tasks are sorted by time, so we don't have
+    This means waiting ETA tasks are sorted by time, so we don't have
     to poll the whole list all the time.
 
 * Now also imports modules listed in :setting:`CELERY_IMPORTS` when running
@@ -961,7 +961,7 @@ Documentation
 
 0.8.4
 =====
-:release-date: 2010-02-05 01:52 P.M CEST
+:release-date: 2010-02-05 01:52 p.m. CEST
 :release-by: Ask Solem
 
 * Now emits a warning if the --detach argument is used.
@@ -979,7 +979,7 @@ Documentation
 
 0.8.3
 =====
-:release-date: 2009-12-22 09:43 A.M CEST
+:release-date: 2009-12-22 09:43 a.m. CEST
 :release-by: Ask Solem
 
 * Fixed a possible race condition that could happen when storing/querying
@@ -993,7 +993,7 @@ Documentation
 
 0.8.2
 =====
-:release-date: 2009-11-20 03:40 P.M CEST
+:release-date: 2009-11-20 03:40 p.m. CEST
 :release-by: Ask Solem
 
 * QOS Prefetch count wasn't applied properly, as it was set for every message
@@ -1004,7 +1004,7 @@ Documentation
 
 0.8.1
 =================================
-:release-date: 2009-11-16 05:21 P.M CEST
+:release-date: 2009-11-16 05:21 p.m. CEST
 :release-by: Ask Solem
 
 .. _v081-very-important:
@@ -1098,7 +1098,7 @@ Changes
 
 0.8.0
 =====
-:release-date: 2009-09-22 03:06 P.M CEST
+:release-date: 2009-09-22 03:06 p.m. CEST
 :release-by: Ask Solem
 
 .. _v080-incompatible:
@@ -1244,7 +1244,7 @@ News
 
 0.6.0
 =====
-:release-date: 2009-08-07 06:54 A.M CET
+:release-date: 2009-08-07 06:54 a.m. CET
 :release-by: Ask Solem
 
 .. _v060-important:
@@ -1326,7 +1326,7 @@ News
 
 0.4.1
 =====
-:release-date: 2009-07-02 01:42 P.M CET
+:release-date: 2009-07-02 01:42 p.m. CET
 :release-by: Ask Solem
 
 * Fixed a bug with parsing the message options (`mandatory`,
@@ -1336,24 +1336,24 @@ News
 
 0.4.0
 =====
-:release-date: 2009-07-01 07:29 P.M CET
+:release-date: 2009-07-01 07:29 p.m. CET
 :release-by: Ask Solem
 
 * Adds eager execution. `celery.execute.apply`|`Task.apply` executes the
   function blocking until the task is done, for API compatibility it
-  returns an `celery.result.EagerResult` instance. You can configure
+  returns a `celery.result.EagerResult` instance. You can configure
   Celery to always run tasks locally by setting the
   :setting:`CELERY_ALWAYS_EAGER` setting to `True`.
 
 * Now depends on `anyjson`.
 
-* 99% coverage using python `coverage` 3.0.
+* 99% coverage using Python `coverage` 3.0.
 
 .. _version-0.3.20:
 
 0.3.20
 ======
-:release-date: 2009-06-25 08:42 P.M CET
+:release-date: 2009-06-25 08:42 p.m. CET
 :release-by: Ask Solem
 
 * New arguments to `apply_async` (the advanced version of
@@ -1438,7 +1438,7 @@ News
 
 0.3.7
 =====
-:release-date: 2008-06-16 11:41 P.M CET
+:release-date: 2008-06-16 11:41 p.m. CET
 :release-by: Ask Solem
 
 * **IMPORTANT** Now uses AMQP`s `basic.consume` instead of
@@ -1505,7 +1505,7 @@ News
 
 0.3.3
 =====
-:release-date: 2009-06-08 01:07 P.M CET
+:release-date: 2009-06-08 01:07 p.m. CET
 :release-by: Ask Solem
 
 * The `PeriodicWorkController` now sleeps for 1 second between checking
@@ -1515,7 +1515,7 @@ News
 
 0.3.2
 =====
-:release-date: 2009-06-08 01:07 P.M CET
+:release-date: 2009-06-08 01:07 p.m. CET
 :release-by: Ask Solem
 
 * worker: Added option `--discard`: Discard (delete!) all waiting
@@ -1527,7 +1527,7 @@ News
 
 0.3.1
 =====
-:release-date: 2009-06-08 01:07 P.M CET
+:release-date: 2009-06-08 01:07 p.m. CET
 :release-by: Ask Solem
 
 * The `PeriodicTask` worker is now running in its own thread instead
@@ -1539,7 +1539,7 @@ News
 
 0.3.0
 =====
-:release-date: 2009-06-08 12:41 P.M CET
+:release-date: 2009-06-08 12:41 p.m. CET
 :release-by: Ask Solem
 
 .. warning::
@@ -1596,7 +1596,7 @@ arguments, so be sure to flush your task queue before you upgrade.
   Thanks to Vitaly Babiy and Jirka Vejrazka.
 
 * **IMPORTANT** Now using pickle to encode task arguments. This means you
-  now can pass complex python objects to tasks as arguments.
+  now can pass complex Python objects to tasks as arguments.
 
 * Removed dependency to `yadayada`.
 
@@ -1617,7 +1617,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.2.0
 =====
-:release-date: 2009-05-20 05:14 P.M CET
+:release-date: 2009-05-20 05:14 p.m. CET
 :release-by: Ask Solem
 
 * Final release of 0.2.0
@@ -1631,7 +1631,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.2.0-pre3
 ==========
-:release-date: 2009-05-20 05:14 P.M CET
+:release-date: 2009-05-20 05:14 p.m. CET
 :release-by: Ask Solem
 
 * *Internal release*. Improved handling of unpickleable exceptions,
@@ -1642,7 +1642,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.2.0-pre2
 ==========
-:release-date: 2009-05-20 01:56 P.M CET
+:release-date: 2009-05-20 01:56 p.m. CET
 :release-by: Ask Solem
 
 * Now handles unpickleable exceptions (like the dynamically generated
@@ -1652,7 +1652,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.2.0-pre1
 ==========
-:release-date: 2009-05-20 12:33 P.M CET
+:release-date: 2009-05-20 12:33 p.m. CET
 :release-by: Ask Solem
 
 * It's getting quite stable, with a lot of new features, so bump
@@ -1666,7 +1666,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.15
 ======
-:release-date: 2009-05-19 04:13 P.M CET
+:release-date: 2009-05-19 04:13 p.m. CET
 :release-by: Ask Solem
 
 * The Celery daemon was leaking AMQP connections, this should be fixed,
@@ -1677,7 +1677,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.14
 ======
-:release-date: 2009-05-19 01:08 P.M CET
+:release-date: 2009-05-19 01:08 p.m. CET
 :release-by: Ask Solem
 
 * Fixed a syntax error in the `TaskSet` class (no such variable
@@ -1687,7 +1687,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.13
 ======
-:release-date: 2009-05-19 12:36 P.M CET
+:release-date: 2009-05-19 12:36 p.m. CET
 :release-by: Ask Solem
 
 * Forgot to add `yadayada` to install requirements.
@@ -1714,7 +1714,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.12
 ======
-:release-date: 2009-05-18 04:38 P.M CET
+:release-date: 2009-05-18 04:38 p.m. CET
 :release-by: Ask Solem
 
 * `delay_task()` etc. now returns `celery.task.AsyncResult` object,
@@ -1762,7 +1762,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.11
 ======
-:release-date: 2009-05-12 02:08 P.M CET
+:release-date: 2009-05-12 02:08 p.m. CET
 :release-by: Ask Solem
 
 * The logging system was leaking file descriptors, resulting in
@@ -1772,7 +1772,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.10
 ======
-:release-date: 2009-05-11 12:46 P.M CET
+:release-date: 2009-05-11 12:46 p.m. CET
 :release-by: Ask Solem
 
 * Tasks now supports both positional arguments and keyword arguments.
@@ -1785,7 +1785,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.8
 =====
-:release-date: 2009-05-07 12:27 P.M CET
+:release-date: 2009-05-07 12:27 p.m. CET
 :release-by: Ask Solem
 
 * Better test coverage
@@ -1797,7 +1797,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.7
 =====
-:release-date: 2009-04-30 01:50 P.M CET
+:release-date: 2009-04-30 01:50 p.m. CET
 :release-by: Ask Solem
 
 * Added some unit tests
@@ -1816,7 +1816,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.6
 =====
-:release-date: 2009-04-28 02:13 P.M CET
+:release-date: 2009-04-28 02:13 p.m. CET
 :release-by: Ask Solem
 
 * Introducing `TaskSet`. A set of subtasks is executed and you can
@@ -1867,7 +1867,7 @@ arguments, so be sure to flush your task queue before you upgrade.
 
 0.1.0
 =====
-:release-date: 2009-04-24 11:28 A.M CET
+:release-date: 2009-04-24 11:28 a.m. CET
 :release-by: Ask Solem
 
 * Initial release

+ 12 - 17
docs/history/changelog-2.0.rst

@@ -11,7 +11,7 @@
 
 2.0.3
 =====
-:release-date: 2010-08-27 12:00 P.M CEST
+:release-date: 2010-08-27 12:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v203-fixes:
@@ -152,7 +152,7 @@ Documentation
 
 2.0.2
 =====
-:release-date: 2010-07-22 11:31 A.M CEST
+:release-date: 2010-07-22 11:31 a.m. CEST
 :release-by: Ask Solem
 
 * Routes: When using the dict route syntax, the exchange for a task
@@ -242,7 +242,7 @@ Documentation
         # Get currently reserved tasks
         >>> i.reserved()
 
-        # Get the current eta schedule
+        # Get the current ETA schedule
         >>> i.scheduled()
 
         # Worker statistics and info
@@ -274,7 +274,7 @@ Documentation
 
 2.0.1
 =====
-:release-date: 2010-07-09 03:02 P.M CEST
+:release-date: 2010-07-09 03:02 p.m. CEST
 :release-by: Ask Solem
 
 * multiprocessing.pool: Now handles encoding errors, so that pickling errors
@@ -302,7 +302,7 @@ Documentation
     The scheduler sleeps between iterations so it doesn't consume too much CPU.
     It keeps a list of the scheduled items sorted by time, at each iteration
     it sleeps for the remaining time of the item with the nearest deadline.
-    If there are no eta tasks it will sleep for a minimum amount of time, one
+    If there are no ETA tasks it will sleep for a minimum amount of time, one
     second by default.
 
     A bug sneaked in here, making it sleep for one second for every task
@@ -412,7 +412,7 @@ Documentation
 
 2.0.0
 =====
-:release-date: 2010-07-02 02:30 P.M CEST
+:release-date: 2010-07-02 02:30 p.m. CEST
 :release-by: Ask Solem
 
 Foreword
@@ -421,7 +421,7 @@ Foreword
 Celery 2.0 contains backward incompatible changes, the most important
 being that the Django dependency has been removed so Celery no longer
 supports Django out of the box, but instead as an add-on package
-called `django-celery`_.
+called :pypi:`django-celery`.
 
 We're very sorry for breaking backwards compatibility, but there's
 also many new and exciting features to make up for the time you lose
@@ -438,9 +438,9 @@ Big thanks to all contributors, testers and users!
 Upgrading for Django-users
 --------------------------
 
-Django integration has been moved to a separate package: `django-celery`_.
+Django integration has been moved to a separate package: :pypi:`django-celery`.
 
-* To upgrade you need to install the `django-celery`_ module and change:
+* To upgrade you need to install the :pypi:`django-celery` module and change:
 
   .. code-block:: python
 
@@ -460,7 +460,7 @@ Django integration has been moved to a separate package: `django-celery`_.
         import os
         os.environ['CELERY_LOADER'] = 'django'
 
-* The following modules has been moved to `django-celery`_:
+* The following modules has been moved to :pypi:`django-celery`:
 
     =====================================  =====================================
     **Module name**                        **Replace with**
@@ -483,8 +483,6 @@ When the Django loader is used, the "database" and "cache" result backend
 aliases will point to the :mod:`djcelery` backends instead of the built-in backends,
 and configuration will be read from the Django settings.
 
-.. _`django-celery`: http://pypi.python.org/pypi/django-celery
-
 .. _v200-upgrade:
 
 Upgrading for others
@@ -548,13 +546,10 @@ but it supports mostly the same configuration syntax:
 
         CELERY_CACHE_BACKEND = 'memcached://A.example.com:11211;B.example.com'
 
-To use the cache backend you must either have the `pylibmc`_ or
-`python-memcached`_ library installed, of which the former is regarded
+To use the cache backend you must either have the :pypi:`pylibmc` or
+:pypi:`python-memcached` library installed, of which the former is regarded
 as the best choice.
 
-.. _`pylibmc`: http://pypi.python.org/pypi/pylibmc
-.. _`python-memcached`: http://pypi.python.org/pypi/python-memcached
-
 The support backend types are `memcached://` and `memory://`,
 we haven't felt the need to support any of the other backends
 provided by Django.

+ 6 - 6
docs/history/changelog-2.1.rst

@@ -11,7 +11,7 @@
 
 2.1.4
 =====
-:release-date: 2010-12-03 12:00 P.M CEST
+:release-date: 2010-12-03 12:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v214-fixes:
@@ -69,7 +69,7 @@ Documentation
 
 2.1.3
 =====
-:release-date: 2010-11-09 05:00 P.M CEST
+:release-date: 2010-11-09 05:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v213-fixes:
@@ -88,7 +88,7 @@ Documentation
 * Fixed pickling errors when pickling :class:`AsyncResult` on older Python
   versions.
 
-* worker: prefetch count was decremented by eta tasks even if there
+* worker: prefetch count was decremented by ETA tasks even if there
   were no active prefetch limits.
 
 
@@ -117,7 +117,7 @@ Fixes
 
 2.1.1
 =====
-:release-date: 2010-10-14 02:00 P.M CEST
+:release-date: 2010-10-14 02:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v211-fixes:
@@ -131,7 +131,7 @@ Fixes
 
 * snapshots: Fixed race condition leading to loss of events.
 
-* worker: Reject tasks with an eta that cannot be converted to a time stamp.
+* worker: Reject tasks with an ETA that cannot be converted to a time stamp.
 
     See issue #209
 
@@ -257,7 +257,7 @@ News
 
 2.1.0
 =====
-:release-date: 2010-10-08 12:00 P.M CEST
+:release-date: 2010-10-08 12:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v210-important:

+ 10 - 12
docs/history/changelog-2.2.rst

@@ -11,7 +11,7 @@
 
 2.2.8
 =====
-:release-date: 2011-11-25 04:00 P.M GMT
+:release-date: 2011-11-25 04:00 p.m. GMT
 :release-by: Ask Solem
 
 .. _v228-security-fixes:
@@ -36,7 +36,7 @@ Security Fixes
 
 2.2.7
 =====
-:release-date: 2011-06-13 04:00 P.M BST
+:release-date: 2011-06-13 04:00 p.m. BST
 :release-by: Ask Solem
 
 * New signals: :signal:`after_setup_logger` and
@@ -60,7 +60,7 @@ Security Fixes
 
 2.2.6
 =====
-:release-date: 2011-04-15 04:00 P.M CEST
+:release-date: 2011-04-15 04:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v226-important:
@@ -68,7 +68,7 @@ Security Fixes
 Important Notes
 ---------------
 
-* Now depends on Kombu 1.1.2.
+* Now depends on :pypi:`Kombu` 1.1.2.
 
 * Dependency lists now explicitly specifies that we don't want
   :pypi:`python-dateutil` 2.x, as this version only supports Python 3.
@@ -122,7 +122,7 @@ Fixes
 
 2.2.5
 =====
-:release-date: 2011-03-28 06:00 P.M CEST
+:release-date: 2011-03-28 06:00 p.m. CEST
 :release-by: Ask Solem
 
 .. _v225-important:
@@ -339,7 +339,7 @@ Fixes
 
 2.2.3
 =====
-:release-date: 2011-02-12 04:00 P.M CET
+:release-date: 2011-02-12 04:00 p.m. CET
 :release-by: Ask Solem
 
 .. _v223-fixes:
@@ -347,7 +347,7 @@ Fixes
 Fixes
 -----
 
-* Now depends on Kombu 1.0.3
+* Now depends on :pypi:`Kombu` 1.0.3
 
 * Task.retry now supports a ``max_retries`` argument, used to change the
   default value.
@@ -397,7 +397,7 @@ Fixes
 
 2.2.2
 =====
-:release-date: 2011-02-03 04:00 P.M CET
+:release-date: 2011-02-03 04:00 p.m. CET
 :release-by: Ask Solem
 
 .. _v222-fixes:
@@ -428,7 +428,7 @@ Fixes
 
 2.2.1
 =====
-:release-date: 2011-02-02 04:00 P.M CET
+:release-date: 2011-02-02 04:00 p.m. CET
 :release-by: Ask Solem
 
 .. _v221-fixes:
@@ -460,7 +460,7 @@ Fixes
 Important Notes
 ---------------
 
-* Carrot has been replaced with `Kombu`_
+* Carrot has been replaced with :pypi:`Kombu`
 
     Kombu is the next generation messaging library for Python,
     fixing several flaws present in Carrot that was hard to fix
@@ -482,8 +482,6 @@ Important Notes
     fanout exchanges so it's able to perform worker remote control
     commands.
 
-.. _`Kombu`: http://pypi.python.org/pypi/kombu
-
 * Magic keyword arguments pending deprecation.
 
     The magic keyword arguments were responsible for many problems

+ 5 - 5
docs/history/changelog-2.3.rst

@@ -11,7 +11,7 @@
 
 2.3.4
 =====
-:release-date: 2011-11-25 04:00 P.M GMT
+:release-date: 2011-11-25 04:00 p.m. GMT
 :release-by: Ask Solem
 
 .. _v234-security-fixes:
@@ -46,7 +46,7 @@ Fixes
 
 2.3.3
 =====
-:release-date: 2011-16-09 05:00 P.M BST
+:release-date: 2011-16-09 05:00 p.m. BST
 :release-by: Mher Movsisyan
 
 * Monkey patching :attr:`sys.stdout` could result in the worker
@@ -61,7 +61,7 @@ Fixes
 
 2.3.2
 =====
-:release-date: 2011-10-07 05:00 P.M BST
+:release-date: 2011-10-07 05:00 p.m. BST
 :release-by: Ask Solem
 
 .. _v232-news:
@@ -125,7 +125,7 @@ Fixes
 
 2.3.1
 =====
-:release-date: 2011-08-07 08:00 P.M BST
+:release-date: 2011-08-07 08:00 p.m. BST
 :release-by: Ask Solem
 
 Fixes
@@ -139,7 +139,7 @@ Fixes
 
 2.3.0
 =====
-:release-date: 2011-08-05 12:00 P.M BST
+:release-date: 2011-08-05 12:00 p.m. BST
 :tested: CPython: 2.5, 2.6, 2.7; PyPy: 1.5; Jython: 2.5.2
 :release-by: Ask Solem
 

+ 6 - 6
docs/history/changelog-2.4.rst

@@ -11,7 +11,7 @@
 
 2.4.5
 =====
-:release-date: 2011-12-02 05:00 P.M GMT
+:release-date: 2011-12-02 05:00 p.m. GMT
 :release-by: Ask Solem
 
 * Periodic task interval schedules were accidentally rounded down,
@@ -28,7 +28,7 @@
 
 2.4.4
 =====
-:release-date: 2011-11-25 04:00 P.M GMT
+:release-date: 2011-11-25 04:00 p.m. GMT
 :release-by: Ask Solem
 
 .. _v244-security-fixes:
@@ -80,7 +80,7 @@ Fixes
 
 2.4.3
 =====
-:release-date: 2011-11-22 06:00 P.M GMT
+:release-date: 2011-11-22 06:00 p.m. GMT
 :release-by: Ask Solem
 
 * Fixes module import typo in `celeryctl` (Issue #538).
@@ -91,7 +91,7 @@ Fixes
 
 2.4.2
 =====
-:release-date: 2011-11-14 12:00 P.M GMT
+:release-date: 2011-11-14 12:00 p.m. GMT
 :release-by: Ask Solem
 
 * Program module no longer uses relative imports so that it's
@@ -101,7 +101,7 @@ Fixes
 
 2.4.1
 =====
-:release-date: 2011-11-07 06:00 P.M GMT
+:release-date: 2011-11-07 06:00 p.m. GMT
 :release-by: Ask Solem
 
 * ``celeryctl inspect`` commands was missing output.
@@ -120,7 +120,7 @@ Fixes
 
 2.4.0
 =====
-:release-date: 2011-11-04 04:00 P.M GMT
+:release-date: 2011-11-04 04:00 p.m. GMT
 :release-by: Ask Solem
 
 .. _v240-important:

+ 5 - 5
docs/history/changelog-2.5.rst

@@ -18,7 +18,7 @@ If you're looking for versions prior to 2.5 you should visit our
 
 2.5.5
 =====
-:release-date: 2012-06-06 04:00 P.M BST
+:release-date: 2012-06-06 04:00 p.m. BST
 :release-by: Ask Solem
 
 This is a dummy release performed for the following goals:
@@ -30,7 +30,7 @@ This is a dummy release performed for the following goals:
 
 2.5.3
 =====
-:release-date: 2012-04-16 07:00 P.M BST
+:release-date: 2012-04-16 07:00 p.m. BST
 :release-by: Ask Solem
 
 * A bug causes messages to be sent with UTC time-stamps even though
@@ -49,7 +49,7 @@ This is a dummy release performed for the following goals:
 
 2.5.2
 =====
-:release-date: 2012-04-13 04:30 P.M GMT
+:release-date: 2012-04-13 04:30 p.m. GMT
 :release-by: Ask Solem
 
 .. _v252-news:
@@ -172,7 +172,7 @@ Fixes
 
 2.5.1
 =====
-:release-date: 2012-03-01 01:00 P.M GMT
+:release-date: 2012-03-01 01:00 p.m. GMT
 :release-by: Ask Solem
 
 .. _v251-fixes:
@@ -205,7 +205,7 @@ Fixes
 
 2.5.0
 =====
-:release-date: 2012-02-24 04:00 P.M GMT
+:release-date: 2012-02-24 04:00 p.m. GMT
 :release-by: Ask Solem
 
 See :ref:`whatsnew-2.5`.

+ 28 - 29
docs/history/changelog-3.0.rst

@@ -13,7 +13,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.24
 ======
-:release-date: 2013-10-11 04:40 P.M BST
+:release-date: 2013-10-11 04:40 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on :ref:`Kombu 2.5.15 <kombu:version-2.5.15>`.
@@ -77,7 +77,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.23
 ======
-:release-date: 2013-09-02 01:00 P.M BST
+:release-date: 2013-09-02 01:00 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on :ref:`Kombu 2.5.14 <kombu:version-2.5.14>`.
@@ -106,7 +106,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.22
 ======
-:release-date: 2013-08-16 04:30 P.M BST
+:release-date: 2013-08-16 04:30 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on :ref:`Kombu 2.5.13 <kombu:version-2.5.13>`.
@@ -131,7 +131,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.21
 ======
-:release-date: 2013-07-05 04:30 P.M BST
+:release-date: 2013-07-05 04:30 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on :pypi:`billiard` 2.7.3.31.
@@ -149,7 +149,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.20
 ======
-:release-date: 2013-06-28 04:00 P.M BST
+:release-date: 2013-06-28 04:00 p.m. BST
 :release-by: Ask Solem
 
 - Contains workaround for deadlock problems.
@@ -218,7 +218,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.19
 ======
-:release-date: 2013-04-17 04:30:00 P.M BST
+:release-date: 2013-04-17 04:30:00 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on :pypi:`billiard` 2.7.3.28
@@ -259,7 +259,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.18
 ======
-:release-date: 2013-04-12 05:00:00 P.M BST
+:release-date: 2013-04-12 05:00:00 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on :pypi:`kombu` 2.5.10.
@@ -351,7 +351,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
   it now raises the expected :exc:`TypeError` instead (Issue #1125).
 
 - The worker will now properly handle messages with invalid
-  eta/expires fields (Issue #1232).
+  ETA/expires fields (Issue #1232).
 
 - The ``pool_restart`` remote control command now reports
   an error if the :setting:`CELERYD_POOL_RESTARTS` setting isn't set.
@@ -381,13 +381,13 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 - Worker: The start-up banner now includes system platform.
 
 - ``celery inspect|status|control`` now gives an error if used
-  with an SQL based broker transport.
+  with a SQL based broker transport.
 
 .. _version-3.0.17:
 
 3.0.17
 ======
-:release-date: 2013-03-22 04:00:00 P.M UTC
+:release-date: 2013-03-22 04:00:00 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on kombu 2.5.8
@@ -447,7 +447,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.16
 ======
-:release-date: 2013-03-07 04:00:00 P.M UTC
+:release-date: 2013-03-07 04:00:00 p.m. UTC
 :release-by: Ask Solem
 
 - Happy International Women's Day!
@@ -536,7 +536,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.15
 ======
-:release-date: 2013-02-11 04:30:00 P.M UTC
+:release-date: 2013-02-11 04:30:00 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on billiard 2.7.3.21 which fixed a syntax error crash.
@@ -547,7 +547,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.14
 ======
-:release-date: 2013-02-08 05:00:00 P.M UTC
+:release-date: 2013-02-08 05:00:00 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on Kombu 2.5.6
@@ -665,7 +665,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.13
 ======
-:release-date: 2013-01-07 04:00:00 P.M UTC
+:release-date: 2013-01-07 04:00:00 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on Kombu 2.5
@@ -801,7 +801,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.12
 ======
-:release-date: 2012-11-06 02:00 P.M UTC
+:release-date: 2012-11-06 02:00 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on kombu 2.4.8
@@ -867,7 +867,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.11
 ======
-:release-date: 2012-09-26 04:00 P.M UTC
+:release-date: 2012-09-26 04:00 p.m. UTC
 :release-by: Ask Solem
 
 - [security:low] generic-init.d scripts changed permissions of /var/log & /var/run
@@ -948,7 +948,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.10
 ======
-:release-date: 2012-09-20 05:30 P.M BST
+:release-date: 2012-09-20 05:30 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on kombu 2.4.7
@@ -1069,7 +1069,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.9
 =====
-:release-date: 2012-08-31 06:00 P.M BST
+:release-date: 2012-08-31 06:00 p.m. BST
 :release-by: Ask Solem
 
 - Important note for users of Django and the database scheduler!
@@ -1137,7 +1137,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.8
 =====
-:release-date: 2012-08-29 05:00 P.M BST
+:release-date: 2012-08-29 05:00 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on Kombu 2.4.4
@@ -1178,7 +1178,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.7
 =====
-:release-date: 2012-08-24 05:00 P.M BST
+:release-date: 2012-08-24 05:00 p.m. BST
 :release-by: Ask Solem
 
 - Fixes several problems with periodic tasks and timezones (Issue #937).
@@ -1231,8 +1231,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.6
 =====
-:release-date: 2012-08-17 11:00 P.M BST
-:release-by: Ask Solem
+:release-date: 2012-08-17 11:00 p.mp.m. Ask Solem
 
 - Now depends on kombu 2.4.0
 
@@ -1312,7 +1311,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.5
 =====
-:release-date: 2012-08-01 04:00 P.M BST
+:release-date: 2012-08-01 04:00 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on kombu 2.3.1 + billiard 2.7.3.11
@@ -1339,7 +1338,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.4
 =====
-:release-date: 2012-07-26 07:00 P.M BST
+:release-date: 2012-07-26 07:00 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on Kombu 2.3
@@ -1471,7 +1470,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.3
 =====
-:release-date: 2012-07-20 09:17 P.M BST
+:release-date: 2012-07-20 09:17 p.m. BST
 :release-by: Ask Solem
 
 - :pypi:`amqplib` passes the channel object as part of the delivery_info
@@ -1481,7 +1480,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.2
 =====
-:release-date: 2012-07-20 04:00 P.M BST
+:release-date: 2012-07-20 04:00 p.m. BST
 :release-by: Ask Solem
 
 - A bug caused the following task options to not take defaults from the
@@ -1498,7 +1497,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 - Task Request: ``delivery_info`` is now passed through as-is (Issue #807).
 
-- The eta argument now supports datetime's with a timezone set (Issue #855).
+- The ETA argument now supports datetime's with a timezone set (Issue #855).
 
 - The worker's banner displayed the autoscale settings in the wrong order
   (Issue #859).
@@ -1545,7 +1544,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.1
 =====
-:release-date: 2012-07-10 06:00 P.M BST
+:release-date: 2012-07-10 06:00 p.m. BST
 :release-by: Ask Solem
 
 - Now depends on kombu 2.2.5
@@ -1600,7 +1599,7 @@ If you're looking for versions prior to 3.0.x you should go to :ref:`history`.
 
 3.0.0 (Chiastic Slide)
 ======================
-:release-date: 2012-07-07 01:30 P.M BST
+:release-date: 2012-07-07 01:30 p.m. BST
 :release-by: Ask Solem
 
 See :ref:`whatsnew-3.0`.

+ 22 - 22
docs/history/changelog-3.1.rst

@@ -12,7 +12,7 @@ new in Celery 3.1.
 
 3.1.21
 ======
-:release-date: 2016-03-04 11:16 A.M PST
+:release-date: 2016-03-04 11:16 a.m. PST
 :release-by: Ask Solem
 
 - **Requirements**
@@ -71,7 +71,7 @@ new in Celery 3.1.
 
 3.1.20
 ======
-:release-date: 2016-01-22 06:50 P.M UTC
+:release-date: 2016-01-22 06:50 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**
@@ -184,7 +184,7 @@ new in Celery 3.1.
 
 3.1.19
 ======
-:release-date: 2015-10-26 01:00 P.M UTC
+:release-date: 2015-10-26 01:00 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**
@@ -265,7 +265,7 @@ new in Celery 3.1.
 
 3.1.18
 ======
-:release-date: 2015-04-22 05:30 P.M UTC
+:release-date: 2015-04-22 05:30 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**
@@ -326,7 +326,7 @@ new in Celery 3.1.
 
 3.1.17
 ======
-:release-date: 2014-11-19 03:30 P.M UTC
+:release-date: 2014-11-19 03:30 p.m. UTC
 :release-by: Ask Solem
 
 .. admonition:: Don't enable the `CELERYD_FORCE_EXECV` setting!
@@ -424,7 +424,7 @@ new in Celery 3.1.
 
 3.1.16
 ======
-:release-date: 2014-10-03 06:00 P.M UTC
+:release-date: 2014-10-03 06:00 p.m. UTC
 :release-by: Ask Solem
 
 - **Worker**: 3.1.15 broke :option:`-Ofair <celery worker -O>`
@@ -459,7 +459,7 @@ new in Celery 3.1.
 
 3.1.15
 ======
-:release-date: 2014-09-14 11:00 P.M UTC
+:release-date: 2014-09-14 11:00 p.m. UTC
 :release-by: Ask Solem
 
 - **Django**: Now makes sure ``django.setup()`` is called
@@ -473,7 +473,7 @@ new in Celery 3.1.
 
 3.1.14
 ======
-:release-date: 2014-09-08 03:00 P.M UTC
+:release-date: 2014-09-08 03:00 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**
@@ -571,7 +571,7 @@ News
 
 3.1.12
 ======
-:release-date: 2014-06-09 10:12 P.M UTC
+:release-date: 2014-06-09 10:12 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**
@@ -693,7 +693,7 @@ News
 
 3.1.11
 ======
-:release-date: 2014-04-16 11:00 P.M UTC
+:release-date: 2014-04-16 11:00 p.m. UTC
 :release-by: Ask Solem
 
 - **Now compatible with RabbitMQ 3.3.0**
@@ -768,7 +768,7 @@ News
 
 3.1.10
 ======
-:release-date: 2014-03-22 09:40 P.M UTC
+:release-date: 2014-03-22 09:40 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**:
@@ -914,7 +914,7 @@ News
 
 3.1.9
 =====
-:release-date: 2014-02-10 06:43 P.M UTC
+:release-date: 2014-02-10 06:43 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**:
@@ -988,7 +988,7 @@ News
 
 3.1.8
 =====
-:release-date: 2014-01-17 10:45 P.M UTC
+:release-date: 2014-01-17 10:45 p.m. UTC
 :release-by: Ask Solem
 
 - **Requirements**:
@@ -1121,7 +1121,7 @@ News
 
 3.1.7
 =====
-:release-date: 2013-12-17 06:00 P.M UTC
+:release-date: 2013-12-17 06:00 p.m. UTC
 :release-by: Ask Solem
 
 .. _v317-important:
@@ -1295,7 +1295,7 @@ Fixes
 
 3.1.6
 =====
-:release-date: 2013-12-02 06:00 P.M UTC
+:release-date: 2013-12-02 06:00 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on :mod:`billiard` 3.3.0.10.
@@ -1342,7 +1342,7 @@ Fixes
 
 - Canvas: Now unrolls groups with only one task (optimization) (Issue #1656).
 
-- Task: Fixed problem with eta and timezones.
+- Task: Fixed problem with ETA and timezones.
 
     Fix contributed by Alexander Koval.
 
@@ -1369,7 +1369,7 @@ Fixes
 
 3.1.5
 =====
-:release-date: 2013-11-21 06:20 P.M UTC
+:release-date: 2013-11-21 06:20 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on :ref:`Kombu 3.0.6 <kombu:version-3.0.6>`.
@@ -1483,7 +1483,7 @@ Fixes
 
 3.1.4
 =====
-:release-date: 2013-11-15 11:40 P.M UTC
+:release-date: 2013-11-15 11:40 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on :ref:`Kombu 3.0.5 <kombu:version-3.0.5>`.
@@ -1515,7 +1515,7 @@ Fixes
 
 3.1.3
 =====
-:release-date: 2013-11-13 00:55 A.M UTC
+:release-date: 2013-11-13 00:55 a.m. UTC
 :release-by: Ask Solem
 
 - Fixed compatibility problem with Python 2.7.0 - 2.7.5 (Issue #1637)
@@ -1532,7 +1532,7 @@ Fixes
 
 3.1.2
 =====
-:release-date: 2013-11-12 08:00 P.M UTC
+:release-date: 2013-11-12 08:00 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on :mod:`billiard` 3.3.0.6
@@ -1557,7 +1557,7 @@ Fixes
 
 3.1.1
 =====
-:release-date: 2013-11-11 06:30 P.M UTC
+:release-date: 2013-11-11 06:30 p.m. UTC
 :release-by: Ask Solem
 
 - Now depends on :mod:`billiard` 3.3.0.4.
@@ -1593,7 +1593,7 @@ Fixes
 
 3.1.0
 =======
-:release-date: 2013-11-09 11:00 P.M UTC
+:release-date: 2013-11-09 11:00 p.m. UTC
 :release-by: Ask Solem
 
 See :ref:`whatsnew-3.1`.

+ 3 - 5
docs/history/whatsnew-2.5.rst

@@ -18,14 +18,14 @@ While this version is backward compatible with previous versions
 it's important that you read the following section.
 
 If you use Celery in combination with Django you must also
-read the `django-celery changelog <djcelery:version-2.5.0>` and upgrade to `django-celery 2.5`_.
+read the `django-celery changelog <djcelery:version-2.5.0>` and upgrade
+to :pypi:`django-celery 2.5 <django-celery>`.
 
 This version is officially supported on CPython 2.5, 2.6, 2.7, 3.2 and 3.3,
 as well as PyPy and Jython.
 
 
 .. _`website`: http://celeryproject.org/
-.. _`django-celery 2.5`: http://pypi.python.org/pypi/django-celery/
 
 .. contents::
     :local:
@@ -115,15 +115,13 @@ Optimization
   optimized, meaning the worker is able to process a great deal
   more tasks/second compared to previous versions. As an example the solo
   pool can now process up to 15000 tasks/second on a 4 core MacBook Pro
-  when using the `pylibrabbitmq`_ transport, where it previously
+  when using the :pypi:`pylibrabbitmq` transport, where it previously
   could only do 5000 tasks/second.
 
 - The task error tracebacks are now much shorter.
 
 - Fixed a noticeable delay in task processing when rate limits are enabled.
 
-.. _`pylibrabbitmq`: http://pypi.python.org/pylibrabbitmq/
-
 .. _v250-deprecations:
 
 Deprecation Time-line Changes

+ 2 - 2
docs/history/whatsnew-3.0.rst

@@ -21,7 +21,8 @@ While this version is backward compatible with previous versions
 it's important that you read the following section.
 
 If you use Celery in combination with Django you must also
-read the `django-celery changelog`_ and upgrade to `django-celery 3.0`_.
+read the `django-celery changelog`_ and upgrade
+to :pypi:`django-celery 3.0 <django-celery>`.
 
 This version is officially supported on CPython 2.5, 2.6, 2.7, 3.2 and 3.3,
 as well as PyPy and Jython.
@@ -75,7 +76,6 @@ Highlights
 .. _`website`: http://celeryproject.org/
 .. _`django-celery changelog`:
     https://github.com/celery/django-celery/tree/master/Changelog
-.. _`django-celery 3.0`: http://pypi.python.org/pypi/django-celery/
 
 .. contents::
     :local:

+ 3 - 8
docs/includes/installation.txt

@@ -6,18 +6,12 @@ Installation
 You can install Celery either via the Python Package Index (PyPI)
 or from source.
 
-To install using `pip`,:
+To install using :command:`pip`:
 
 .. code-block:: console
 
     $ pip install -U Celery
 
-To install using `easy_install`,:
-
-.. code-block:: console
-
-    $ easy_install -U Celery
-
 .. _bundles:
 
 Bundles
@@ -112,7 +106,8 @@ Transports and Backends
 Downloading and installing from source
 --------------------------------------
 
-Download the latest version of Celery from
+Download the latest version of Celery from PyPI:
+
 http://pypi.python.org/pypi/celery/
 
 You can install it by doing the following,:

+ 2 - 2
docs/internals/protocol.rst

@@ -42,7 +42,7 @@ Definition
         # optional
         'meth': string method_name,
         'shadow': string alias_name,
-        'eta':  iso8601 eta,
+        'eta':  iso8601 ETA,
         'expires'; iso8601 expires,
         'retries': int retries,
         'timelimit': (soft, hard),
@@ -129,7 +129,7 @@ Changes from version 1
 
 - Dispatches to actor based on ``task``, ``meth`` headers
 
-    ``meth`` is unused by python, but may be used in the future
+    ``meth`` is unused by Python, but may be used in the future
     to specify class+method pairs.
 
 - Chain gains a dedicated field.

+ 2 - 4
docs/internals/worker.rst

@@ -30,9 +30,7 @@ Components
 Consumer
 --------
 
-Receives messages from the broker using `Kombu`_.
-
-.. _`Kombu`: http://pypi.python.org/pypi/kombu
+Receives messages from the broker using :pypi:`Kombu`.
 
 When a message is received it's converted into a
 :class:`celery.worker.request.Request` object.
@@ -45,7 +43,7 @@ Timer
 
 The timer schedules internal functions, like cleanup and internal monitoring,
 but also it schedules ETA tasks and rate limited tasks.
-If the scheduled tasks eta has passed it is moved to the execution pool.
+If the scheduled tasks ETA has passed it is moved to the execution pool.
 
 TaskPool
 --------

+ 1 - 1
docs/sec/CELERYSA-0001.txt

@@ -4,7 +4,7 @@
 :contact: security@celeryproject.org
 :author: Ask Solem
 :CVE id: CVE-2011-4356
-:date: 2011-11-25 04:35:00 P.M GMT
+:date: 2011-11-25 04:35:00 p.m. GMT
 
 Details
 =======

+ 1 - 1
docs/sec/CELERYSA-0002.txt

@@ -3,7 +3,7 @@
 =========================================
 :contact: security@celeryproject.org
 :CVE id: TBA
-:date: 2014-07-10 05:00:00 P.M UTC
+:date: 2014-07-10 05:00:00 p.m. UTC
 
 Details
 =======

+ 51 - 3
docs/userguide/calling.rst

@@ -173,12 +173,12 @@ as a partial argument.
 
 .. _calling-eta:
 
-ETA and countdown
+ETA and Countdown
 =================
 
 The ETA (estimated time of arrival) lets you set a specific date and time that
 is the earliest time at which your task will be executed. `countdown` is
-a shortcut to set eta by seconds into the future.
+a shortcut to set ETA by seconds into the future.
 
 .. code-block:: pycon
 
@@ -298,6 +298,54 @@ short by default because a connection failure could lead to a retry pile effect
 if the broker connection is down: e.g. many web server processes waiting
 to retry blocking other incoming requests.
 
+.. _calling-connection-errors:
+
+Connection Error Handling
+=========================
+
+When you send a task and the message transport connection is lost, or
+the connection cannot be iniated, an :exc:`~kombu.exceptions.OperationalError`
+error will be raised:
+
+.. code-block:: pycon
+
+    >>> from proj.tasks import add
+    >>> add.delay(2, 2)
+    Traceback (most recent call last):
+      File "<stdin>", line 1, in <module>
+      File "celery/app/task.py", line 388, in delay
+            return self.apply_async(args, kwargs)
+      File "celery/app/task.py", line 503, in apply_async
+        **options
+      File "celery/app/base.py", line 662, in send_task
+        amqp.send_task_message(P, name, message, **options)
+      File "celery/backends/rpc.py", line 275, in on_task_call
+        maybe_declare(self.binding(producer.channel), retry=True)
+      File "/opt/celery/kombu/kombu/messaging.py", line 204, in _get_channel
+        channel = self._channel = channel()
+      File "/opt/celery/py-amqp/amqp/connection.py", line 272, in connect
+        self.transport.connect()
+      File "/opt/celery/py-amqp/amqp/transport.py", line 100, in connect
+        self._connect(self.host, self.port, self.connect_timeout)
+      File "/opt/celery/py-amqp/amqp/transport.py", line 141, in _connect
+        self.sock.connect(sa)
+      kombu.exceptions.OperationalError: [Errno 61] Connection refused
+
+If you have :ref:`retries <calling-retry>` enabled this will only happen after
+retries are exhausted, or when disabled immediately.
+
+You can handle this error too:
+
+.. code-block:: pycon
+
+    >>> from celery.utils.log import get_logger
+    >>> logger = get_logger(__name__)
+
+    >>> try:
+    ...     add.delay(2, 2)
+    ... except add.OperationalError as exc:
+    ...     logger.exception('Sending task raised: %r', exc)
+
 .. _calling-serializers:
 
 Serializers
@@ -354,7 +402,7 @@ pickle -- If you have no desire to support any language other than
     messages when sending binary files, and a slight speedup over JSON
     processing.
 
-    See http://docs.python.org/library/pickle.html for more information.
+    See :mod:`pickle` for more information.
 
 yaml -- YAML has many of the same characteristics as json,
     except that it natively supports more data types (including dates,

+ 2 - 1
docs/userguide/canvas.rst

@@ -343,7 +343,8 @@ Here's some examples:
 
         >>> add.signature((2, 2), immutable=True)
 
-    There's also an ``.si`` shortcut for this:
+    There's also a ``.si()`` shortcut for this, which is the preffered way of
+    creating signatures:
 
     .. code-block:: pycon
 

+ 12 - 21
docs/userguide/configuration.rst

@@ -216,15 +216,13 @@ upgraded.
 Default: ``"UTC"``.
 
 Configure Celery to use a custom time zone.
-The timezone value can be any time zone supported by the `pytz`_
+The timezone value can be any time zone supported by the :pypi:`pytz`
 library.
 
 If not set the UTC timezone is used. For backwards compatibility
 there's also a :setting:`enable_utc` setting, and this is set
 to false the system local timezone is used instead.
 
-.. _`pytz`: http://pypi.python.org/pypi/pytz/
-
 .. _conf-tasks:
 
 Task settings
@@ -800,7 +798,7 @@ Cache backend settings
 
 .. note::
 
-    The cache backend supports the :pypi:`pylibmc` and `python-memcached`
+    The cache backend supports the :pypi:`pylibmc` and :pypi:`python-memcached`
     libraries. The latter is used only if :pypi:`pylibmc` isn't installed.
 
 Using a single Memcached server:
@@ -859,10 +857,9 @@ Configuring the backend URL
 
 .. note::
 
-    The Redis backend requires the :pypi:`redis` library:
-    http://pypi.python.org/pypi/redis/
+    The Redis backend requires the :pypi:`redis` library.
 
-    To install the redis package use `pip` or `easy_install`:
+    To install this package use :command:`pip`:
 
     .. code-block:: console
 
@@ -928,9 +925,8 @@ Cassandra backend settings
 .. note::
 
     This Cassandra backend driver requires :pypi:`cassandra-driver`.
-    https://pypi.python.org/pypi/cassandra-driver
 
-    To install, use `pip` or `easy_install`:
+    To install, use :command:`pip`:
 
     .. code-block:: console
 
@@ -1070,10 +1066,9 @@ Riak backend settings
 
 .. note::
 
-    The Riak backend requires the :pypi:`riak` library:
-    http://pypi.python.org/pypi/riak/
+    The Riak backend requires the :pypi:`riak` library.
 
-    To install the :pypi:`riak` package use `pip` or `easy_install`:
+    To install the this package use :command:`pip`:
 
     .. code-block:: console
 
@@ -1143,9 +1138,8 @@ IronCache backend settings
 .. note::
 
     The IronCache backend requires the :pypi:`iron_celery` library:
-    http://pypi.python.org/pypi/iron_celery
 
-    To install the iron_celery package use `pip` or `easy_install`:
+    To install this package use :command:`pip`:
 
     .. code-block:: console
 
@@ -1168,10 +1162,9 @@ Couchbase backend settings
 
 .. note::
 
-    The Couchbase backend requires the :pypi:`couchbase` library:
-    https://pypi.python.org/pypi/couchbase
+    The Couchbase backend requires the :pypi:`couchbase` library.
 
-    To install the :pypi:`couchbase` package use `pip` or `easy_install`:
+    To install this package use :command:`pip`:
 
     .. code-block:: console
 
@@ -1222,9 +1215,8 @@ CouchDB backend settings
 .. note::
 
     The CouchDB backend requires the :pypi:`pycouchdb` library:
-    https://pypi.python.org/pypi/pycouchdb
 
-    To install the Couchbase package use :command:`pip`, or :command:`easy_install`:
+    To install this Couchbase package use :command:`pip`:
 
     .. code-block:: console
 
@@ -1696,8 +1688,7 @@ Toggles SSL usage on broker connection and SSL settings.
 
 If ``True`` the connection will use SSL with default SSL settings.
 If set to a dict, will configure SSL connection according to the specified
-policy. The format used is python `ssl.wrap_socket()
-options <https://docs.python.org/3/library/ssl.html#ssl.wrap_socket>`_.
+policy. The format used is Python's :func:`ssl.wrap_socket` options.
 
 Note that SSL socket is generally served on a separate port by the broker.
 

+ 2 - 5
docs/userguide/extending.rst

@@ -540,7 +540,7 @@ Methods
 
 .. method:: apply_eta_task(request)
 
-    Schedule eta task to execute based on the ``request.eta`` attribute.
+    Schedule ETA task to execute based on the ``request.eta`` attribute.
     (:class:`~celery.worker.request.Request`)
 
 
@@ -785,7 +785,7 @@ of :class:`celery.bin.base.Command`. There's limited documentation,
 unfortunately, but you can find inspiration from the various commands in the
 :mod:`celery.bin` package.
 
-This is how the Flower_ monitoring extension adds the :program:`celery flower` command,
+This is how the :pypi:`Flower` monitoring extension adds the :program:`celery flower` command,
 by adding an entry-point in :file:`setup.py`:
 
 .. code-block:: python
@@ -799,9 +799,6 @@ by adding an entry-point in :file:`setup.py`:
         }
     )
 
-
-.. _Flower: http://pypi.python.org/pypi/flower
-
 The command definition is in two parts separated by the equal sign, where the
 first part is the name of the sub-command (flower), then the second part is
 the fully qualified symbol path to the class that implements the command:

+ 3 - 3
docs/userguide/monitoring.rst

@@ -50,8 +50,8 @@ Commands
   Also all known tasks will be automatically added to locals (unless the
   :option:`--without-tasks <celery shell --without-tasks>` flag is set).
 
-  Uses :pypi:`Ipython`, :pypi:`bpython`, or regular python in that order if
-  installed. You can force an implementation using
+  Uses :pypi:`Ipython`, :pypi:`bpython`, or regular :program:`python` in that
+  order if installed. You can force an implementation using
   :option:`--ipython <celery shell --ipython>`,
   :option:`--bpython <celery shell --bpython>`, or
   :option:`--python <celery shell --python>`.
@@ -123,7 +123,7 @@ Commands
 
     This will list all tasks that have been prefetched by the worker,
     and is currently waiting to be executed (doesn't include tasks
-    with an eta).
+    with an ETA value set).
 
 * **inspect revoked**: List history of revoked tasks
 

+ 3 - 4
docs/userguide/periodic-tasks.rst

@@ -14,8 +14,7 @@ Introduction
 which are then executed by the worker nodes available in the cluster.
 
 By default the entries are taken from the :setting:`beat_schedule` setting,
-but custom stores can also be used, like storing the entries
-in an SQL database.
+but custom stores can also be used, like storing the entries in a SQL database.
 
 You have to ensure only a single scheduler is running for a schedule
 at a time, otherwise you'd end up with duplicate tasks. Using
@@ -90,7 +89,7 @@ beat schedule list.
         # Calls test('world') every 30 seconds
         sender.add_periodic_task(30.0, test.s('world'), expires=10)
 
-        # Executes every Monday morning at 7:30 A.M
+        # Executes every Monday morning at 7:30 a.m.
         sender.add_periodic_task(
             crontab(hour=7, minute=30, day_of_week=1),
             test.s('Happy Mondays!'),
@@ -202,7 +201,7 @@ the :class:`~celery.schedules.crontab` schedule type:
     from celery.schedules import crontab
 
     app.conf.beat_schedule = {
-        # Executes every Monday morning at 7:30 A.M
+        # Executes every Monday morning at 7:30 a.m.
         'add-every-monday-morning': {
             'task': 'tasks.add',
             'schedule': crontab(hour=7, minute=30, day_of_week=1),

+ 1 - 3
docs/userguide/security.rst

@@ -132,7 +132,6 @@ Using `Public-key cryptography` the `auth` serializer can verify the
 authenticity of senders, to enable this read :ref:`message-signing`
 for more information.
 
-.. _`pickle`: http://docs.python.org/library/pickle.html
 .. _`Public-key cryptography`:
     https://en.wikipedia.org/wiki/Public-key_cryptography
 
@@ -141,7 +140,7 @@ for more information.
 Message Signing
 ===============
 
-Celery can use the `pyOpenSSL`_ library to sign message using
+Celery can use the :pypi:`pyOpenSSL` library to sign message using
 `Public-key cryptography`, where
 messages sent by clients are signed using a private key
 and then later verified by the worker using a public certificate.
@@ -182,7 +181,6 @@ with the private key and certificate files located in `/etc/ssl`.
     Also note that the `auth` serializer won't encrypt the contents of
     a message, so if needed this will have to be enabled separately.
 
-.. _`pyOpenSSL`: http://pypi.python.org/pypi/pyOpenSSL
 .. _`X.509`: https://en.wikipedia.org/wiki/X.509
 .. _`Certificate Authority`:
     https://en.wikipedia.org/wiki/Certificate_authority

+ 124 - 39
docs/userguide/tasks.rst

@@ -1,8 +1,8 @@
 .. _guide-tasks:
 
-=======
- Tasks
-=======
+=====================================================================
+                            Tasks
+=====================================================================
 
 Tasks are the building blocks of Celery applications.
 
@@ -11,24 +11,70 @@ dual roles in that it defines both what happens when a task is
 called (sends a message), and what happens when a worker receives that message.
 
 Every task class has a unique name, and this name is referenced in messages
-so that the worker can find the right function to execute.
+so the worker can find the right function to execute.
 
-A task message doesn't disappear
-until the message has been :term:`acknowledged` by a worker. A worker can reserve
-many messages in advance and even if the worker is killed -- caused by power failure
-or otherwise -- the message will be redelivered to another worker.
+A task message is not removed from the queue
+until that message has been :term:`acknowledged` by a worker. A worker can reserve
+many messages in advance and even if the worker is killed -- by power failure
+or some other reason -- the message will be redelivered to another worker.
 
-Ideally task functions should be :term:`idempotent`, which means that
+Ideally task functions should be :term:`idempotent`, which means
 the function won't cause unintended effects even if called
 multiple times with the same arguments.
 Since the worker cannot detect if your tasks are idempotent, the default
-behavior is to acknowledge the message in advance, before it's executed,
-so that a task that's already been started is never executed again..
+behavior is to acknowledge the message in advance, just before it's executed,
+so that a task invocation that already started is never executed again.
 
-If your task is idempotent you can set the :attr:`acks_late` option
+If your task is idempotent you can set the :attr:`~Task.acks_late` option
 to have the worker acknowledge the message *after* the task returns
 instead. See also the FAQ entry :ref:`faq-acks_late-vs-retry`.
 
+Note that the worker will acknowledge the message if the child process executing
+the task is terminated (either by the task calling :func:`sys.exit`, or by signal)
+even when :attr:`~Task.acks_late` is enabled.  This behavior is by purpose
+as...
+
+#. We don't want to rerun tasks that forces the kernel to send
+   a :sig:`SIGSEGV` (segmentation fault) or similar signals to the process.
+#. We assume that a system administrator deliberately killing the task
+   does not want it to automatically restart.
+#. A task that allocates to much memory is in danger of triggering the kernel
+   OOM killer, the same may happen again.
+#. A task that always fails when redelivered may cause a high-frequency
+   message loop taking down the system.
+
+If you really want a task to be redelivered in these scenarios you should
+consider enabling the :setting:`task_reject_on_worker_lost` setting.
+
+.. warning::
+
+    A task that blocks indefinitely may eventually stop the worker instance
+    from doing any other work.
+
+    If you task does I/O then make sure you add timeouts to these operations,
+    like adding a timeout to a web request using the :pypi:`requests` library:
+
+    .. code-block:: python
+
+        connect_timeout, read_timeout = 5.0, 30.0
+        response = requests.get(URL, timeout=(connect_timeout, read_timeout))
+
+    :ref:`Time limits <worker-time-limits>` are convenient for making sure all
+    tasks return in a timely manner, but a time limit event will actually kill
+    the process by force so only use them to detect cases where you haven't
+    used manual timeouts yet.
+
+    The default prefork pool scheduler is not friendly to long-running tasks,
+    so if you have tasks that run for minutes/hours make sure you enable
+    the -Ofair`` command-line argument to the :program:`celery worker`.
+    See :ref:`prefork-pool-prefetch` for more information, and for the
+    best performance route long-running and short-running tasks to
+    dedicated workers (:ref:`routing-automatic`).
+
+    If your worker hangs then please investigate what tasks are running
+    before submitting an issue, as most likely the hanging is caused
+    by one or more tasks hanging on a network operation.
+
 --
 
 In this chapter you'll learn all about defining tasks,
@@ -71,14 +117,14 @@ these can be specified as arguments to the decorator:
     The task decorator is available on your :class:`@Celery` application instance,
     if you don't know what this is then please read :ref:`first-steps`.
 
-    If you're using Django or are still using the "old" module based Celery API,
-    then you can import the task decorator like this:
+    If you're using Django (see :ref:`django-first-steps`), or you're the author
+    of a library then you probably want to use the :func:`@shared_task` decorator:
 
     .. code-block:: python
 
-        from celery import task
+        from celery import shared_task
 
-        @task
+        @shared_task
         def add(x, y):
             return x + y
 
@@ -111,9 +157,9 @@ be the task instance (``self``), just like Python bound methods:
     def add(self, x, y):
         logger.info(self.request.id)
 
-Bound tasks are needed for retries (using :meth:`@Task.retry`), for
-accessing information about the current task request, and for any additional
-functionality you add to custom task base classes.
+Bound tasks are needed for retries (using :meth:`Task.retry() <@Task.retry>`),
+for accessing information about the current task request, and for any
+additional functionality you add to custom task base classes.
 
 Task inheritance
 ----------------
@@ -138,10 +184,13 @@ The ``base`` argument to the task decorator specifies the base class of the task
 Names
 =====
 
-Every task must have a unique name, and a new name
-will be generated out of the function name if a custom name isn't provided.
+Every task must have a unique name.
 
-For example:
+If no explicit name is provided the task decorator will generate one for you,
+and this name will be based on 1) the module the task is defined in, and 2)
+the name of the task function.
+
+Example setting explicit name:
 
 .. code-block:: pycon
 
@@ -162,15 +211,16 @@ defined in another module.
     >>> def add(x, y):
     ...     return x + y
 
-You can tell the name of the task by investigating its name attribute:
+You can tell the name of the task by investigating its ``.name`` attribute:
 
 .. code-block:: pycon
 
     >>> add.name
     'tasks.add'
 
-Which is exactly the name that would've been generated anyway,
-if the module name is :file:`tasks.py`:
+The name we specified here (``tasks.add``) is exactly the name that would've
+been automatically generated for us if the task was defined in a module
+named :file:`tasks.py`:
 
 :file:`tasks.py`:
 
@@ -180,6 +230,8 @@ if the module name is :file:`tasks.py`:
     def add(x, y):
         return x + y
 
+.. code-block:: pycon
+
     >>> from tasks import add
     >>> add.name
     'tasks.add'
@@ -189,6 +241,21 @@ if the module name is :file:`tasks.py`:
 Automatic naming and relative imports
 -------------------------------------
 
+.. sidebar:: Absolute Imports
+
+    The best practice for developers targetting Python 2 is to add the
+    following to the top of **every module**:
+
+    .. code-block:: python
+
+        from __future__ import absolute_import
+
+    This will force you to always use absolute imports so you will
+    never have any problems with tasks using relative names.
+
+    Absolute imports are the default in Python 3 so you don't need this
+    if you target that version.
+
 Relative imports and automatic name generation don't go well together,
 so if you're using relative imports you should set the name explicitly.
 
@@ -306,11 +373,11 @@ So each task will have a name like `moduleA.taskA`, `moduleA.taskB` and
 
 .. _task-request-info:
 
-Context
-=======
+Task Request
+============
 
-:attr:`~@Task.request` contains information and state related to
-the executing task.
+:attr:`Task.request <@Task.request>` contains information and state
+related to the currently executing task.
 
 The request defines the following attributes:
 
@@ -321,10 +388,14 @@ The request defines the following attributes:
 :chord: The unique id of the chord this task belongs to (if the task
         is part of the header).
 
+:correlation_id: Custom ID used for e.g. de-duplication.
+
 :args: Positional arguments.
 
 :kwargs: Keyword arguments.
 
+:origin: Name of host that sent this task.
+
 :retries: How many times the current task has been retried.
           An integer starting at `0`.
 
@@ -339,22 +410,24 @@ The request defines the following attributes:
           This is in UTC time (depending on the :setting:`enable_utc`
           setting).
 
-:logfile: The file the worker logs to. See `Logging`_.
-
-:loglevel: The current log level used.
-
 :hostname: Node name of the worker instance executing the task.
 
 :delivery_info: Additional message delivery information. This is a mapping
                 containing the exchange and routing key used to deliver this
-                task. Used by e.g. :meth:`~@Task.retry`
+                task. Used by e.g. :meth:`Task.retry() <@Task.retry>`
                 to resend the task to the same destination queue.
                 Availability of keys in this dict depends on the
                 message broker used.
 
+:reply-to: Name of queue to send replies back to (used with e.g. RPC result
+           backend).
+
 :called_directly: This flag is set to true if the task wasn't
                   executed by the worker.
 
+:timelimit: A tuple of the current ``(soft, hard)`` time limits active for
+            this task (if any).
+
 :callbacks: A list of signatures to be called if this task returns successfully.
 
 :errback: A list of signatures to be called if this task fails.
@@ -364,13 +437,25 @@ The request defines the following attributes:
 
 .. versionadded:: 3.1
 
-:headers:  Mapping of message headers (may be :const:`None`).
+:headers:  Mapping of message headers sent with this task message
+           (may be :const:`None`).
 
 :reply_to:  Where to send reply to (queue name).
 
 :correlation_id: Usually the same as the task id, often used in amqp
                  to keep track of what a reply is for.
 
+.. versionadded:: 4.0
+
+:root_id: The unique id of the first task in the workflow this task
+          is part of (if any).
+
+:parent_id: The unique id of the task that called this task (if any).
+
+:chain: Reversed list of tasks that form a chain (if any).
+        The last item in this list will be the next task to succeed the
+        current task.  If using version one of the task protocol the chain
+        tasks will be in ``request.callbacks`` instead.
 
 An example task accessing information in the context is:
 
@@ -479,7 +564,7 @@ arguments:
 Retrying
 ========
 
-:meth:`~@Task.retry` can be used to re-execute the task,
+:meth:`Task.retry() <@Task.retry>` can be used to re-execute the task,
 for example in the event of recoverable errors.
 
 When you call ``retry`` it'll send a new message, using the same
@@ -504,8 +589,8 @@ Here's an example using ``retry``:
 
 .. note::
 
-    The :meth:`~@Task.retry` call will raise an exception so any code after the retry
-    won't be reached. This is the :exc:`~@Retry`
+    The :meth:`Task.retry() <@Task.retry>` call will raise an exception so any
+    code after the retry won't be reached. This is the :exc:`~@Retry`
     exception, it isn't handled as an error but rather as a semi-predicate
     to signify to the worker that the task is to be retried,
     so that it can store the correct state when a result backend is enabled.
@@ -697,7 +782,7 @@ General
 
     Default time in seconds before a retry of the task
     should be executed. Can be either :class:`int` or :class:`float`.
-    Default is a 3 minute delay.
+    Default is a three minute delay.
 
 .. attribute:: Task.rate_limit
 

+ 1 - 1
docs/userguide/workers.rst

@@ -780,7 +780,7 @@ You can get a list of tasks waiting to be scheduled by using
 
 .. note::
 
-    These are tasks with an eta/countdown argument, not periodic tasks.
+    These are tasks with an ETA/countdown argument, not periodic tasks.
 
 .. _worker-inspect-reserved:
 

+ 19 - 4
docs/whatsnew-4.0.rst

@@ -752,7 +752,22 @@ An example of the new API is :ref:`here <beat-entries>`.
 .. :sha:`bc18d0859c1570f5eb59f5a969d1d32c63af764b`
 .. :sha:`132d8d94d38f4050db876f56a841d5a5e487b25b`
 
-RabbitMQ Priority queue support
+Handling task connection errors
+-------------------------------
+
+Connection related errors occuring while sending a task is now re-raised
+as a :exc:`kombu.exceptions.OperationalError` error:
+
+.. code-block:: pycon
+
+    >>> try:
+    ...     add.delay(2, 2)
+    ... except add.OperationalError as exc:
+    ...     print('Could not send task %r: %r' % (add, exc))
+
+See :ref:`calling-connection-errors` for more information.
+
+RabbitMQ priority queue support
 -------------------------------
 
 See :ref:`routing-options-rabbitmq-priorities` for more information.
@@ -827,7 +842,7 @@ New Consul result backend introduced.
 
 Add support for Consul as a backend using the Key/Value store of Consul.
 
-Consul has a HTTP API where through you can store keys with their values.
+Consul has an HTTP API where through you can store keys with their values.
 
 The backend extends KeyValueStoreBackend and implements most of the methods.
 
@@ -840,8 +855,8 @@ the backend supports auto expiry of Task results.
 
 For more information on Consul visit http://consul.io/
 
-The backend uses python-consul for talking to the HTTP API. This package is fully
-Python 3 compliant just as this backend is:
+The backend uses :pypi:`python-consul` for talking to the HTTP API.
+This package is fully Python 3 compliant just as this backend is:
 
 .. code-block:: console