Selaa lähdekoodia

Removes most of .five use

Ask Solem 8 vuotta sitten
vanhempi
commit
adaf153de8
100 muutettua tiedostoa jossa 265 lisäystä ja 409 poistoa
  1. 1 1
      celery/__init__.py
  2. 4 5
      celery/app/amqp.py
  3. 1 2
      celery/app/annotations.py
  4. 3 4
      celery/app/base.py
  5. 6 7
      celery/app/defaults.py
  6. 2 2
      celery/app/log.py
  7. 1 2
      celery/app/registry.py
  8. 4 5
      celery/app/routes.py
  9. 2 2
      celery/app/task.py
  10. 1 1
      celery/app/trace.py
  11. 8 9
      celery/app/utils.py
  12. 1 2
      celery/apps/beat.py
  13. 4 5
      celery/apps/worker.py
  14. 2 3
      celery/backends/__init__.py
  15. 2 2
      celery/backends/async.py
  16. 4 5
      celery/backends/base.py
  17. 0 1
      celery/backends/database/__init__.py
  18. 3 4
      celery/backends/mongodb.py
  19. 1 2
      celery/backends/redis.py
  20. 1 2
      celery/backends/rpc.py
  21. 7 7
      celery/beat.py
  22. 3 4
      celery/bin/amqp.py
  23. 6 6
      celery/bin/base.py
  24. 6 7
      celery/bin/celery.py
  25. 1 2
      celery/bin/graph.py
  26. 3 4
      celery/bin/multi.py
  27. 1 2
      celery/bin/worker.py
  28. 8 10
      celery/bootsteps.py
  29. 8 9
      celery/concurrency/asynpool.py
  30. 3 3
      celery/concurrency/base.py
  31. 1 2
      celery/concurrency/prefork.py
  32. 5 6
      celery/contrib/migrate.py
  33. 0 2
      celery/contrib/rdb.py
  34. 1 2
      celery/contrib/sphinx.py
  35. 1 2
      celery/events/__init__.py
  36. 7 6
      celery/events/cursesmon.py
  37. 10 11
      celery/events/state.py
  38. 1 3
      celery/exceptions.py
  39. 5 6
      celery/loaders/base.py
  40. 2 4
      celery/local.py
  41. 6 7
      celery/platforms.py
  42. 4 4
      celery/result.py
  43. 2 3
      celery/schedules.py
  44. 1 2
      celery/security/certificate.py
  45. 1 4
      celery/security/utils.py
  46. 2 3
      celery/task/base.py
  47. 2 3
      celery/tests/app/test_amqp.py
  48. 1 2
      celery/tests/app/test_app.py
  49. 2 3
      celery/tests/app/test_beat.py
  50. 0 1
      celery/tests/app/test_builtins.py
  51. 2 3
      celery/tests/app/test_defaults.py
  52. 1 2
      celery/tests/app/test_loaders.py
  53. 1 2
      celery/tests/app/test_schedules.py
  54. 1 1
      celery/tests/backends/test_amqp.py
  55. 4 20
      celery/tests/backends/test_base.py
  56. 6 7
      celery/tests/backends/test_cache.py
  57. 1 2
      celery/tests/bin/test_base.py
  58. 0 1
      celery/tests/concurrency/test_prefork.py
  59. 0 1
      celery/tests/events/test_state.py
  60. 2 1
      celery/tests/security/test_security.py
  61. 0 1
      celery/tests/tasks/test_chord.py
  62. 0 1
      celery/tests/tasks/test_result.py
  63. 3 4
      celery/tests/tasks/test_tasks.py
  64. 1 2
      celery/tests/utils/test_collections.py
  65. 1 2
      celery/tests/utils/test_functional.py
  66. 2 2
      celery/tests/utils/test_graph.py
  67. 1 3
      celery/tests/utils/test_imports.py
  68. 2 5
      celery/tests/utils/test_local.py
  69. 0 1
      celery/tests/utils/test_saferef.py
  70. 4 7
      celery/tests/utils/test_saferepr.py
  71. 1 2
      celery/tests/utils/test_term.py
  72. 1 1
      celery/tests/worker/test_control.py
  73. 2 1
      celery/tests/worker/test_loops.py
  74. 1 1
      celery/tests/worker/test_request.py
  75. 1 1
      celery/tests/worker/test_worker.py
  76. 1 4
      celery/utils/abstract.py
  77. 18 55
      celery/utils/collections.py
  78. 2 2
      celery/utils/debug.py
  79. 1 2
      celery/utils/dispatch/signal.py
  80. 2 3
      celery/utils/functional.py
  81. 5 8
      celery/utils/graph.py
  82. 1 2
      celery/utils/imports.py
  83. 3 6
      celery/utils/log.py
  84. 3 5
      celery/utils/saferepr.py
  85. 5 7
      celery/utils/serialization.py
  86. 8 10
      celery/utils/term.py
  87. 1 3
      celery/utils/text.py
  88. 2 3
      celery/utils/threads.py
  89. 1 3
      celery/utils/timer2.py
  90. 2 4
      celery/utils/timeutils.py
  91. 1 2
      celery/worker/__init__.py
  92. 4 4
      celery/worker/consumer/consumer.py
  93. 1 2
      celery/worker/consumer/gossip.py
  94. 2 3
      celery/worker/consumer/mingle.py
  95. 4 3
      celery/worker/control.py
  96. 1 2
      celery/worker/request.py
  97. 4 2
      celery/worker/state.py
  98. 2 1
      docs/tutorials/task-cookbook.rst
  99. 2 2
      funtests/benchmarks/bench_worker.py
  100. 0 1
      funtests/suite/test_leak.py

+ 1 - 1
celery/__init__.py

@@ -47,7 +47,7 @@ del(_temp)
 del(re)
 del(re)
 
 
 if os.environ.get('C_IMPDEBUG'):  # pragma: no cover
 if os.environ.get('C_IMPDEBUG'):  # pragma: no cover
-    from .five import builtins
+    import builtins
 
 
     def debug_import(name, locals=None, globals=None,
     def debug_import(name, locals=None, globals=None,
                      fromlist=None, level=-1, real_import=builtins.__import__):
                      fromlist=None, level=-1, real_import=builtins.__import__):

+ 4 - 5
celery/app/amqp.py

@@ -16,7 +16,6 @@ from kombu.utils import cached_property
 from kombu.utils.functional import maybe_list
 from kombu.utils.functional import maybe_list
 
 
 from celery import signals
 from celery import signals
-from celery.five import items, string_t
 from celery.local import try_import
 from celery.local import try_import
 from celery.utils.nodenames import anon_nodename
 from celery.utils.nodenames import anon_nodename
 from celery.utils.saferepr import saferepr
 from celery.utils.saferepr import saferepr
@@ -47,7 +46,7 @@ task_message = namedtuple('task_message',
 
 
 def utf8dict(d, encoding='utf-8'):
 def utf8dict(d, encoding='utf-8'):
     return {k.decode(encoding) if isinstance(k, bytes) else k: v
     return {k.decode(encoding) if isinstance(k, bytes) else k: v
-            for k, v in items(d)}
+            for k, v in d.items()}
 
 
 
 
 class Queues(dict):
 class Queues(dict):
@@ -77,7 +76,7 @@ class Queues(dict):
         self.max_priority = max_priority
         self.max_priority = max_priority
         if isinstance(queues, (tuple, list)):
         if isinstance(queues, (tuple, list)):
             queues = {q.name: q for q in queues}
             queues = {q.name: q for q in queues}
-        for name, q in items(queues or {}):
+        for name, q in (queues or {}).items():
             self.add(q) if isinstance(q, Queue) else self.add_compat(name, **q)
             self.add(q) if isinstance(q, Queue) else self.add_compat(name, **q)
 
 
     def __getitem__(self, name):
     def __getitem__(self, name):
@@ -157,7 +156,7 @@ class Queues(dict):
         if not active:
         if not active:
             return ''
             return ''
         info = [QUEUE_FORMAT.strip().format(q)
         info = [QUEUE_FORMAT.strip().format(q)
-                for _, q in sorted(items(active))]
+                for _, q in sorted(active.items())]
         if indent_first:
         if indent_first:
             return textindent('\n'.join(info), indent)
             return textindent('\n'.join(info), indent)
         return info[0] + '\n' + textindent('\n'.join(info[1:]), indent)
         return info[0] + '\n' + textindent('\n'.join(info[1:]), indent)
@@ -495,7 +494,7 @@ class AMQP:
             if queue is None and exchange is None:
             if queue is None and exchange is None:
                 queue = default_queue
                 queue = default_queue
             if queue is not None:
             if queue is not None:
-                if isinstance(queue, string_t):
+                if isinstance(queue, str):
                     qname, queue = queue, queues[queue]
                     qname, queue = queue, queues[queue]
                 else:
                 else:
                     qname = queue.name
                     qname = queue.name

+ 1 - 2
celery/app/annotations.py

@@ -9,7 +9,6 @@ This prepares and performs the annotations in the
 """
 """
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 
 
-from celery.five import string_t
 from celery.utils.functional import firstmethod, mlazy
 from celery.utils.functional import firstmethod, mlazy
 from celery.utils.imports import instantiate
 from celery.utils.imports import instantiate
 
 
@@ -40,7 +39,7 @@ def prepare(annotations):
     def expand_annotation(annotation):
     def expand_annotation(annotation):
         if isinstance(annotation, dict):
         if isinstance(annotation, dict):
             return MapAnnotation(annotation)
             return MapAnnotation(annotation)
-        elif isinstance(annotation, string_t):
+        elif isinstance(annotation, str):
             return mlazy(instantiate, annotation)
             return mlazy(instantiate, annotation)
         return annotation
         return annotation
 
 

+ 3 - 4
celery/app/base.py

@@ -6,7 +6,7 @@ import os
 import threading
 import threading
 import warnings
 import warnings
 
 
-from collections import defaultdict, deque
+from collections import UserDict, defaultdict, deque
 from operator import attrgetter
 from operator import attrgetter
 
 
 from kombu import pools
 from kombu import pools
@@ -25,7 +25,6 @@ from celery._state import (
     _announce_app_finalized,
     _announce_app_finalized,
 )
 )
 from celery.exceptions import AlwaysEagerIgnored, ImproperlyConfigured
 from celery.exceptions import AlwaysEagerIgnored, ImproperlyConfigured
-from celery.five import UserDict, bytes_if_py2, values
 from celery.loaders import get_loader_cls
 from celery.loaders import get_loader_cls
 from celery.local import PromiseProxy, maybe_evaluate
 from celery.local import PromiseProxy, maybe_evaluate
 from celery.utils import abstract
 from celery.utils import abstract
@@ -437,7 +436,7 @@ class Celery:
                 while pending:
                 while pending:
                     maybe_evaluate(pending.popleft())
                     maybe_evaluate(pending.popleft())
 
 
-                for task in values(self._tasks):
+                for task in self._tasks.values():
                     task.bind(self)
                     task.bind(self)
 
 
                 self.on_after_finalize.send(sender=self)
                 self.on_after_finalize.send(sender=self)
@@ -930,7 +929,7 @@ class Celery:
         if not keep_reduce:
         if not keep_reduce:
             attrs['__reduce__'] = __reduce__
             attrs['__reduce__'] = __reduce__
 
 
-        return type(bytes_if_py2(name or Class.__name__), (Class,), attrs)
+        return type(name or Class.__name__, (Class,), attrs)
 
 
     def _rgetattr(self, path):
     def _rgetattr(self, path):
         return attrgetter(path)(self)
         return attrgetter(path)(self)

+ 6 - 7
celery/app/defaults.py

@@ -7,7 +7,6 @@ import sys
 from collections import deque, namedtuple
 from collections import deque, namedtuple
 from datetime import timedelta
 from datetime import timedelta
 
 
-from celery.five import items, keys, values
 from celery.utils.functional import memoize
 from celery.utils.functional import memoize
 from celery.utils.serialization import strtobool
 from celery.utils.serialization import strtobool
 
 
@@ -41,7 +40,7 @@ searchresult = namedtuple('searchresult', ('namespace', 'key', 'type'))
 
 
 def Namespace(__old__=None, **options):
 def Namespace(__old__=None, **options):
     if __old__ is not None:
     if __old__ is not None:
-        for opt in values(options):
+        for opt in options.values():
             if not opt.old:
             if not opt.old:
                 opt.old = __old__
                 opt.old = __old__
     return options
     return options
@@ -62,7 +61,7 @@ class Option:
     def __init__(self, default=None, *args, **kwargs):
     def __init__(self, default=None, *args, **kwargs):
         self.default = default
         self.default = default
         self.type = kwargs.get('type') or 'string'
         self.type = kwargs.get('type') or 'string'
-        for attr, value in items(kwargs):
+        for attr, value in kwargs.items():
             setattr(self, attr, value)
             setattr(self, attr, value)
 
 
     def to_python(self, value):
     def to_python(self, value):
@@ -297,7 +296,7 @@ def flatten(d, root='', keyfilter=_flatten_keys):
     stack = deque([(root, d)])
     stack = deque([(root, d)])
     while stack:
     while stack:
         ns, options = stack.popleft()
         ns, options = stack.popleft()
-        for key, opt in items(options):
+        for key, opt in options.items():
             if isinstance(opt, dict):
             if isinstance(opt, dict):
                 stack.append((ns + key + '_', opt))
                 stack.append((ns + key + '_', opt))
             else:
             else:
@@ -312,8 +311,8 @@ _TO_OLD_KEY = {new_key: old_key for old_key, new_key, _ in __compat}
 _TO_NEW_KEY = {old_key: new_key for old_key, new_key, _ in __compat}
 _TO_NEW_KEY = {old_key: new_key for old_key, new_key, _ in __compat}
 __compat = None
 __compat = None
 
 
-SETTING_KEYS = set(keys(DEFAULTS))
-_OLD_SETTING_KEYS = set(keys(_TO_NEW_KEY))
+SETTING_KEYS = set(DEFAULTS)
+_OLD_SETTING_KEYS = set(_TO_NEW_KEY)
 
 
 
 
 def find_deprecated_settings(source):  # pragma: no cover
 def find_deprecated_settings(source):  # pragma: no cover
@@ -337,7 +336,7 @@ def find(name, namespace='celery'):
         )
         )
     except KeyError:
     except KeyError:
         # - Try all the other namespaces.
         # - Try all the other namespaces.
-        for ns, opts in items(NAMESPACES):
+        for ns, opts in NAMESPACES.items():
             if ns.lower() == name.lower():
             if ns.lower() == name.lower():
                 return searchresult(None, ns, opts)
                 return searchresult(None, ns, opts)
             elif isinstance(opts, dict):
             elif isinstance(opts, dict):

+ 2 - 2
celery/app/log.py

@@ -19,7 +19,7 @@ from kombu.utils.encoding import set_default_encoding_file
 
 
 from celery import signals
 from celery import signals
 from celery._state import get_current_task
 from celery._state import get_current_task
-from celery.five import class_property, string_t
+from celery.five import class_property
 from celery.platforms import isatty
 from celery.platforms import isatty
 from celery.utils.log import (
 from celery.utils.log import (
     get_logger, mlevel,
     get_logger, mlevel,
@@ -138,7 +138,7 @@ class Logging:
 
 
         # This is a hack for multiprocessing's fork+exec, so that
         # This is a hack for multiprocessing's fork+exec, so that
         # logging before Process.run works.
         # logging before Process.run works.
-        logfile_name = logfile if isinstance(logfile, string_t) else ''
+        logfile_name = logfile if isinstance(logfile, str) else ''
         os.environ.update(_MP_FORK_LOGLEVEL_=str(loglevel),
         os.environ.update(_MP_FORK_LOGLEVEL_=str(loglevel),
                           _MP_FORK_LOGFILE_=logfile_name,
                           _MP_FORK_LOGFILE_=logfile_name,
                           _MP_FORK_LOGFORMAT_=format)
                           _MP_FORK_LOGFORMAT_=format)

+ 1 - 2
celery/app/registry.py

@@ -8,7 +8,6 @@ from importlib import import_module
 
 
 from celery._state import get_current_app
 from celery._state import get_current_app
 from celery.exceptions import NotRegistered
 from celery.exceptions import NotRegistered
-from celery.five import items
 
 
 __all__ = ['TaskRegistry']
 __all__ = ['TaskRegistry']
 
 
@@ -50,7 +49,7 @@ class TaskRegistry(dict):
         return self.filter_types('periodic')
         return self.filter_types('periodic')
 
 
     def filter_types(self, type):
     def filter_types(self, type):
-        return {name: task for name, task in items(self)
+        return {name: task for name, task in self.items()
                 if getattr(task, 'type', 'regular') == type}
                 if getattr(task, 'type', 'regular') == type}
 
 
 
 

+ 4 - 5
celery/app/routes.py

@@ -13,7 +13,6 @@ from collections import Mapping, OrderedDict
 from kombu import Queue
 from kombu import Queue
 
 
 from celery.exceptions import QueueNotFound
 from celery.exceptions import QueueNotFound
-from celery.five import items, string_t
 from celery.utils.collections import lpmerge
 from celery.utils.collections import lpmerge
 from celery.utils.functional import maybe_evaluate, mlazy
 from celery.utils.functional import maybe_evaluate, mlazy
 from celery.utils.imports import symbol_by_name
 from celery.utils.imports import symbol_by_name
@@ -30,7 +29,7 @@ class MapRoute:
     """Creates a router out of a :class:`dict`."""
     """Creates a router out of a :class:`dict`."""
 
 
     def __init__(self, map):
     def __init__(self, map):
-        map = items(map) if isinstance(map, Mapping) else map
+        map = map.items() if isinstance(map, Mapping) else map
         self.map = {}
         self.map = {}
         self.patterns = OrderedDict()
         self.patterns = OrderedDict()
         for k, v in map:
         for k, v in map:
@@ -48,7 +47,7 @@ class MapRoute:
             pass
             pass
         except ValueError:
         except ValueError:
             return {'queue': self.map[name]}
             return {'queue': self.map[name]}
-        for regex, route in items(self.patterns):
+        for regex, route in self.patterns.items():
             if regex.match(name):
             if regex.match(name):
                 try:
                 try:
                     return dict(route)
                     return dict(route)
@@ -78,7 +77,7 @@ class Router:
 
 
     def expand_destination(self, route):
     def expand_destination(self, route):
         # Route can be a queue name: convenient for direct exchanges.
         # Route can be a queue name: convenient for direct exchanges.
-        if isinstance(route, string_t):
+        if isinstance(route, str):
             queue, route = route, {}
             queue, route = route, {}
         else:
         else:
             # can use defaults from configured queue, but override specific
             # can use defaults from configured queue, but override specific
@@ -126,7 +125,7 @@ def prepare(routes):
     def expand_route(route):
     def expand_route(route):
         if isinstance(route, (Mapping, list, tuple)):
         if isinstance(route, (Mapping, list, tuple)):
             return MapRoute(route)
             return MapRoute(route)
-        if isinstance(route, string_t):
+        if isinstance(route, str):
             return mlazy(expand_router_string, route)
             return mlazy(expand_router_string, route)
         return route
         return route
 
 

+ 2 - 2
celery/app/task.py

@@ -12,7 +12,7 @@ from celery import states
 from celery._state import _task_stack
 from celery._state import _task_stack
 from celery.canvas import signature
 from celery.canvas import signature
 from celery.exceptions import Ignore, MaxRetriesExceededError, Reject, Retry
 from celery.exceptions import Ignore, MaxRetriesExceededError, Reject, Retry
-from celery.five import class_property, items
+from celery.five import class_property
 from celery.result import EagerResult
 from celery.result import EagerResult
 from celery.utils import abstract
 from celery.utils import abstract
 from celery.utils.functional import mattrgetter, maybe_list
 from celery.utils.functional import mattrgetter, maybe_list
@@ -326,7 +326,7 @@ class Task:
     @classmethod
     @classmethod
     def annotate(self):
     def annotate(self):
         for d in resolve_all_annotations(self.app.annotations, self):
         for d in resolve_all_annotations(self.app.annotations, self):
-            for key, value in items(d):
+            for key, value in d.items():
                 if key.startswith('@'):
                 if key.startswith('@'):
                     self.add_around(key[1:], value)
                     self.add_around(key[1:], value)
                 else:
                 else:

+ 1 - 1
celery/app/trace.py

@@ -17,6 +17,7 @@ import os
 import sys
 import sys
 
 
 from collections import namedtuple
 from collections import namedtuple
+from time import monotonic
 from warnings import warn
 from warnings import warn
 
 
 from billiard.einfo import ExceptionInfo
 from billiard.einfo import ExceptionInfo
@@ -30,7 +31,6 @@ from celery._state import _task_stack
 from celery.app import set_default_app
 from celery.app import set_default_app
 from celery.app.task import Task as BaseTask, Context
 from celery.app.task import Task as BaseTask, Context
 from celery.exceptions import Ignore, Reject, Retry, InvalidTaskError
 from celery.exceptions import Ignore, Reject, Retry, InvalidTaskError
-from celery.five import monotonic
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 from celery.utils.nodenames import gethostname
 from celery.utils.nodenames import gethostname
 from celery.utils.objects import mro_lookup
 from celery.utils.objects import mro_lookup

+ 8 - 9
celery/app/utils.py

@@ -13,7 +13,6 @@ from types import ModuleType
 from kombu.utils.url import maybe_sanitize_url
 from kombu.utils.url import maybe_sanitize_url
 
 
 from celery.exceptions import ImproperlyConfigured
 from celery.exceptions import ImproperlyConfigured
-from celery.five import items, keys, string_t, values
 from celery.platforms import pyimplementation
 from celery.platforms import pyimplementation
 from celery.utils.collections import ConfigurationView
 from celery.utils.collections import ConfigurationView
 from celery.utils.text import pretty
 from celery.utils.text import pretty
@@ -152,8 +151,8 @@ class Settings(ConfigurationView):
     def table(self, with_defaults=False, censored=True):
     def table(self, with_defaults=False, censored=True):
         filt = filter_hidden_settings if censored else lambda v: v
         filt = filter_hidden_settings if censored else lambda v: v
         return filt({
         return filt({
-            k: v for k, v in items(
-                self if with_defaults else self.without_defaults())
+            k: v for k, v in (
+                self if with_defaults else self.without_defaults()).items()
             if not k.startswith('_')
             if not k.startswith('_')
         })
         })
 
 
@@ -162,7 +161,7 @@ class Settings(ConfigurationView):
         configuration."""
         configuration."""
         return '\n'.join(
         return '\n'.join(
             '{0}: {1}'.format(key, pretty(value, width=50))
             '{0}: {1}'.format(key, pretty(value, width=50))
-            for key, value in items(self.table(with_defaults, censored)))
+            for key, value in self.table(with_defaults, censored.items()))
 
 
 
 
 def _new_key_to_old(key, convert=_TO_OLD_KEY.get):
 def _new_key_to_old(key, convert=_TO_OLD_KEY.get):
@@ -190,7 +189,7 @@ def detect_settings(conf, preconf={}, ignore_keys=set(), prefix=None,
     source = conf
     source = conf
     if conf is None:
     if conf is None:
         source, conf = preconf, {}
         source, conf = preconf, {}
-    have = set(keys(source)) - ignore_keys
+    have = set(source) - ignore_keys
     is_in_new = have.intersection(all_keys)
     is_in_new = have.intersection(all_keys)
     is_in_old = have.intersection(old_keys)
     is_in_old = have.intersection(old_keys)
 
 
@@ -227,7 +226,7 @@ def detect_settings(conf, preconf={}, ignore_keys=set(), prefix=None,
             for key in sorted(really_left)
             for key in sorted(really_left)
         )))
         )))
 
 
-    preconf = {info.convert.get(k, k): v for k, v in items(preconf)}
+    preconf = {info.convert.get(k, k): v for k, v in preconf.items()}
     defaults = dict(deepcopy(info.defaults), **preconf)
     defaults = dict(deepcopy(info.defaults), **preconf)
     return Settings(preconf, [conf, defaults], info.key_t, prefix=prefix)
     return Settings(preconf, [conf, defaults], info.key_t, prefix=prefix)
 
 
@@ -275,7 +274,7 @@ def filter_hidden_settings(conf):
     def maybe_censor(key, value, mask='*' * 8):
     def maybe_censor(key, value, mask='*' * 8):
         if isinstance(value, Mapping):
         if isinstance(value, Mapping):
             return filter_hidden_settings(value)
             return filter_hidden_settings(value)
-        if isinstance(key, string_t):
+        if isinstance(key, str):
             if HIDDEN_SETTINGS.search(key):
             if HIDDEN_SETTINGS.search(key):
                 return mask
                 return mask
             elif 'broker_url' in key.lower():
             elif 'broker_url' in key.lower():
@@ -286,7 +285,7 @@ def filter_hidden_settings(conf):
 
 
         return value
         return value
 
 
-    return {k: maybe_censor(k, v) for k, v in items(conf)}
+    return {k: maybe_censor(k, v) for k, v in conf.items()}
 
 
 
 
 def bugreport(app):
 def bugreport(app):
@@ -346,7 +345,7 @@ def find_app(app, symbol_by_name=symbol_by_name, imp=import_from_cwd):
                         )
                         )
                     except ImportError:
                     except ImportError:
                         pass
                         pass
-                for suspect in values(vars(sym)):
+                for suspect in vars(sym).values():
                     if isinstance(suspect, Celery):
                     if isinstance(suspect, Celery):
                         return suspect
                         return suspect
                 raise
                 raise

+ 1 - 2
celery/apps/beat.py

@@ -14,7 +14,6 @@ import sys
 from datetime import datetime
 from datetime import datetime
 
 
 from celery import VERSION_BANNER, platforms, beat
 from celery import VERSION_BANNER, platforms, beat
-from celery.five import text_t
 from celery.utils.imports import qualname
 from celery.utils.imports import qualname
 from celery.utils.log import LOG_LEVELS, get_logger
 from celery.utils.log import LOG_LEVELS, get_logger
 from celery.utils.timeutils import humanize_seconds
 from celery.utils.timeutils import humanize_seconds
@@ -110,7 +109,7 @@ class Beat:
 
 
     def banner(self, service):
     def banner(self, service):
         c = self.colored
         c = self.colored
-        return text_t(  # flake8: noqa
+        return str(  # flake8: noqa
             c.blue('__    ', c.magenta('-'),
             c.blue('__    ', c.magenta('-'),
             c.blue('    ... __   '), c.magenta('-'),
             c.blue('    ... __   '), c.magenta('-'),
             c.blue('        _\n'),
             c.blue('        _\n'),

+ 4 - 5
celery/apps/worker.py

@@ -21,7 +21,6 @@ from kombu.utils.encoding import safe_str
 from celery import VERSION_BANNER, platforms, signals
 from celery import VERSION_BANNER, platforms, signals
 from celery.app import trace
 from celery.app import trace
 from celery.exceptions import WorkerShutdown, WorkerTerminate
 from celery.exceptions import WorkerShutdown, WorkerTerminate
-from celery.five import string, string_t
 from celery.loaders.app import AppLoader
 from celery.loaders.app import AppLoader
 from celery.platforms import EX_FAILURE, EX_OK, check_privileges, isatty
 from celery.platforms import EX_FAILURE, EX_OK, check_privileges, isatty
 from celery.utils.debug import cry
 from celery.utils.debug import cry
@@ -136,8 +135,8 @@ class Worker(WorkController):
         # Dump configuration to screen so we have some basic information
         # Dump configuration to screen so we have some basic information
         # for when users sends bug reports.
         # for when users sends bug reports.
         print(safe_str(''.join([
         print(safe_str(''.join([
-            string(self.colored.cyan(' \n', self.startup_info())),
-            string(self.colored.reset(self.extra_info() or '')),
+            str(self.colored.cyan(' \n', self.startup_info())),
+            str(self.colored.reset(self.extra_info() or '')),
         ])), file=sys.__stdout__)
         ])), file=sys.__stdout__)
         self.set_process_status('-active-')
         self.set_process_status('-active-')
         self.install_platform_tweaks(self)
         self.install_platform_tweaks(self)
@@ -175,7 +174,7 @@ class Worker(WorkController):
 
 
     def startup_info(self):
     def startup_info(self):
         app = self.app
         app = self.app
-        concurrency = string(self.concurrency)
+        concurrency = str(self.concurrency)
         appr = '{0}:{1:#x}'.format(app.main or '__main__', id(app))
         appr = '{0}:{1:#x}'.format(app.main or '__main__', id(app))
         if not isinstance(app.loader, AppLoader):
         if not isinstance(app.loader, AppLoader):
             loader = qualname(app.loader)
             loader = qualname(app.loader)
@@ -183,7 +182,7 @@ class Worker(WorkController):
                 loader = loader[14:]
                 loader = loader[14:]
             appr += ' ({0})'.format(loader)
             appr += ' ({0})'.format(loader)
         pool = self.pool_cls
         pool = self.pool_cls
-        if not isinstance(pool, string_t):
+        if not isinstance(pool, str):
             pool = pool.__module__
             pool = pool.__module__
         concurrency += ' ({0})'.format(pool.split('.')[-1])
         concurrency += ' ({0})'.format(pool.split('.')[-1])
         events = 'ON'
         events = 'ON'

+ 2 - 3
celery/backends/__init__.py

@@ -8,7 +8,6 @@ import types
 from celery.exceptions import ImproperlyConfigured
 from celery.exceptions import ImproperlyConfigured
 from celery.local import Proxy
 from celery.local import Proxy
 from celery._state import current_app
 from celery._state import current_app
-from celery.five import reraise
 from celery.utils.imports import symbol_by_name
 from celery.utils.imports import symbol_by_name
 
 
 __all__ = ['get_backend_cls', 'get_backend_by_url']
 __all__ = ['get_backend_cls', 'get_backend_by_url']
@@ -47,8 +46,8 @@ def get_backend_cls(backend=None, loader=None):
     try:
     try:
         cls = symbol_by_name(backend, aliases)
         cls = symbol_by_name(backend, aliases)
     except ValueError as exc:
     except ValueError as exc:
-        reraise(ImproperlyConfigured, ImproperlyConfigured(
-            UNKNOWN_BACKEND.format(backend, exc)), sys.exc_info()[2])
+        raise ImproperlyConfigured(UNKNOWN_BACKEND.format(
+            backend, exc)).with_traceback(sys.exc_info()[2])
     if isinstance(cls, types.ModuleType):
     if isinstance(cls, types.ModuleType):
         raise ImproperlyConfigured(UNKNOWN_BACKEND.format(
         raise ImproperlyConfigured(UNKNOWN_BACKEND.format(
             backend, 'is a Python module, not a backend class.'))
             backend, 'is a Python module, not a backend class.'))

+ 2 - 2
celery/backends/async.py

@@ -4,15 +4,15 @@ from __future__ import absolute_import, unicode_literals
 import socket
 import socket
 
 
 from collections import deque
 from collections import deque
-from time import sleep
+from time import monotonic, sleep
 from weakref import WeakKeyDictionary
 from weakref import WeakKeyDictionary
+from queue import Empty
 
 
 from kombu.syn import detect_environment
 from kombu.syn import detect_environment
 from kombu.utils import cached_property
 from kombu.utils import cached_property
 
 
 from celery import states
 from celery import states
 from celery.exceptions import TimeoutError
 from celery.exceptions import TimeoutError
-from celery.five import Empty, monotonic
 
 
 drainers = {}
 drainers = {}
 
 

+ 4 - 5
celery/backends/base.py

@@ -27,7 +27,6 @@ from celery import states
 from celery import current_app, group, maybe_signature
 from celery import current_app, group, maybe_signature
 from celery.app import current_task
 from celery.app import current_task
 from celery.exceptions import ChordError, TimeoutError, TaskRevokedError
 from celery.exceptions import ChordError, TimeoutError, TaskRevokedError
-from celery.five import items
 from celery.result import (
 from celery.result import (
     GroupResult, ResultBase, allow_join_result, result_from_tuple,
     GroupResult, ResultBase, allow_join_result, result_from_tuple,
 )
 )
@@ -390,7 +389,7 @@ class Backend:
 
 
     def apply_chord(self, header, partial_args, group_id, body,
     def apply_chord(self, header, partial_args, group_id, body,
                     options={}, **kwargs):
                     options={}, **kwargs):
-        fixed_options = {k: v for k, v in items(options) if k != 'task_id'}
+        fixed_options = {k: v for k, v in options.items() if k != 'task_id'}
         result = header(*partial_args, task_id=group_id, **fixed_options or {})
         result = header(*partial_args, task_id=group_id, **fixed_options or {})
         self.fallback_chord_unlock(group_id, body, **kwargs)
         self.fallback_chord_unlock(group_id, body, **kwargs)
         return result
         return result
@@ -555,7 +554,7 @@ class BaseKeyValueStoreBackend(Backend):
             # client returns dict so mapping preserved.
             # client returns dict so mapping preserved.
             return {
             return {
                 self._strip_prefix(k): v
                 self._strip_prefix(k): v
-                for k, v in self._filter_ready(items(values))
+                for k, v in self._filter_ready(values.items())
             }
             }
         else:
         else:
             # client returns list so need to recreate mapping.
             # client returns list so need to recreate mapping.
@@ -589,7 +588,7 @@ class BaseKeyValueStoreBackend(Backend):
                                                  for k in keys]), keys)
                                                  for k in keys]), keys)
             cache.update(r)
             cache.update(r)
             ids.difference_update({bytes_to_str(v) for v in r})
             ids.difference_update({bytes_to_str(v) for v in r})
-            for key, value in items(r):
+            for key, value in r.items():
                 if on_message is not None:
                 if on_message is not None:
                     on_message(value)
                     on_message(value)
                 yield bytes_to_str(key), value
                 yield bytes_to_str(key), value
@@ -644,7 +643,7 @@ class BaseKeyValueStoreBackend(Backend):
                           result=None, options={}, **kwargs):
                           result=None, options={}, **kwargs):
         self.save_group(group_id, self.app.GroupResult(group_id, result))
         self.save_group(group_id, self.app.GroupResult(group_id, result))
 
 
-        fixed_options = {k: v for k, v in items(options) if k != 'task_id'}
+        fixed_options = {k: v for k, v in options.items() if k != 'task_id'}
 
 
         return header(*partial_args, task_id=group_id, **fixed_options or {})
         return header(*partial_args, task_id=group_id, **fixed_options or {})
 
 

+ 0 - 1
celery/backends/database/__init__.py

@@ -11,7 +11,6 @@ from vine.utils import wraps
 from celery import states
 from celery import states
 from celery.backends.base import BaseBackend
 from celery.backends.base import BaseBackend
 from celery.exceptions import ImproperlyConfigured
 from celery.exceptions import ImproperlyConfigured
-from celery.five import range
 from celery.utils.timeutils import maybe_timedelta
 from celery.utils.timeutils import maybe_timedelta
 
 
 from .models import Task
 from .models import Task

+ 3 - 4
celery/backends/mongodb.py

@@ -9,7 +9,6 @@ from kombu.utils.url import maybe_sanitize_url
 from kombu.exceptions import EncodeError
 from kombu.exceptions import EncodeError
 from celery import states
 from celery import states
 from celery.exceptions import ImproperlyConfigured
 from celery.exceptions import ImproperlyConfigured
-from celery.five import string_t, items
 
 
 from .base import BaseBackend
 from .base import BaseBackend
 
 
@@ -67,7 +66,7 @@ class MongoBackend(BaseBackend):
                 'MongoDB backend.')
                 'MongoDB backend.')
 
 
         # Set option defaults
         # Set option defaults
-        for key, value in items(self._prepare_client_options()):
+        for key, value in self._prepare_client_options().items():
             self.options.setdefault(key, value)
             self.options.setdefault(key, value)
 
 
         # update conf with mongo uri data, only if uri was given
         # update conf with mongo uri data, only if uri was given
@@ -138,8 +137,8 @@ class MongoBackend(BaseBackend):
                 # This enables the use of replica sets and sharding.
                 # This enables the use of replica sets and sharding.
                 # See pymongo.Connection() for more info.
                 # See pymongo.Connection() for more info.
                 host = self.host
                 host = self.host
-                if isinstance(host, string_t) \
-                   and not host.startswith('mongodb://'):
+                if (isinstance(host, str) and
+                        not host.startswith('mongodb://')):
                     host = 'mongodb://{0}:{1}'.format(host, self.port)
                     host = 'mongodb://{0}:{1}'.format(host, self.port)
             # don't change self.options
             # don't change self.options
             conf = dict(self.options)
             conf = dict(self.options)

+ 1 - 2
celery/backends/redis.py

@@ -11,7 +11,6 @@ from celery import states
 from celery._state import task_join_will_block
 from celery._state import task_join_will_block
 from celery.canvas import maybe_signature
 from celery.canvas import maybe_signature
 from celery.exceptions import ChordError, ImproperlyConfigured
 from celery.exceptions import ChordError, ImproperlyConfigured
-from celery.five import string_t
 from celery.utils import deprecated
 from celery.utils import deprecated
 from celery.utils.functional import dictfilter
 from celery.utils.functional import dictfilter
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
@@ -165,7 +164,7 @@ class RedisBackend(base.BaseKeyValueStoreBackend, async.AsyncBackendMixin):
 
 
         # db may be string and start with / like in kombu.
         # db may be string and start with / like in kombu.
         db = connparams.get('db') or 0
         db = connparams.get('db') or 0
-        db = db.strip('/') if isinstance(db, string_t) else db
+        db = db.strip('/') if isinstance(db, str) else db
         connparams['db'] = int(db)
         connparams['db'] = int(db)
 
 
         # Query parameters override other parameters
         # Query parameters override other parameters

+ 1 - 2
celery/backends/rpc.py

@@ -12,7 +12,6 @@ from kombu.utils import cached_property, register_after_fork
 from celery import current_task
 from celery import current_task
 from celery import states
 from celery import states
 from celery._state import task_join_will_block
 from celery._state import task_join_will_block
-from celery.five import items, range
 from celery.utils.functional import dictfilter
 from celery.utils.functional import dictfilter
 from celery.utils.timeutils import maybe_s_to_ms
 from celery.utils.timeutils import maybe_s_to_ms
 
 
@@ -176,7 +175,7 @@ class BaseRPCBackend(base.Backend, AsyncBackendMixin):
                 prev = None
                 prev = None
 
 
         latest = latest_by_id.pop(task_id, None)
         latest = latest_by_id.pop(task_id, None)
-        for tid, msg in items(latest_by_id):
+        for tid, msg in latest_by_id.items():
             self.on_out_of_band_result(tid, msg)
             self.on_out_of_band_result(tid, msg)
 
 
         if latest:
         if latest:

+ 7 - 7
celery/beat.py

@@ -13,6 +13,7 @@ import traceback
 from collections import namedtuple
 from collections import namedtuple
 from functools import total_ordering
 from functools import total_ordering
 from threading import Event, Thread
 from threading import Event, Thread
+from time import monotonic
 
 
 from billiard import ensure_multiprocessing
 from billiard import ensure_multiprocessing
 from billiard.context import Process
 from billiard.context import Process
@@ -23,7 +24,6 @@ from kombu.utils.functional import maybe_evaluate
 from . import __version__
 from . import __version__
 from . import platforms
 from . import platforms
 from . import signals
 from . import signals
-from .five import items, monotonic, reraise, values
 from .schedules import maybe_schedule, crontab
 from .schedules import maybe_schedule, crontab
 from .utils.imports import instantiate
 from .utils.imports import instantiate
 from .utils.timeutils import humanize_seconds
 from .utils.timeutils import humanize_seconds
@@ -132,7 +132,7 @@ class ScheduleEntry:
         return self.schedule.is_due(self.last_run_at)
         return self.schedule.is_due(self.last_run_at)
 
 
     def __iter__(self):
     def __iter__(self):
-        return iter(items(vars(self)))
+        return iter(vars(self).items())
 
 
     def __repr__(self):
     def __repr__(self):
         return '<{name} {0.name} {call} {0.schedule}'.format(
         return '<{name} {0.name} {call} {0.schedule}'.format(
@@ -250,7 +250,7 @@ class Scheduler:
         H = self._heap
         H = self._heap
         if H is None:
         if H is None:
             H = self._heap = [event_t(_when(e, e.is_due()[1]) or 0, 5, e)
             H = self._heap = [event_t(_when(e, e.is_due()[1]) or 0, 5, e)
-                              for e in values(self.schedule)]
+                              for e in self.schedule.values()]
             heapify(H)
             heapify(H)
         if not H:
         if not H:
             return max_interval
             return max_interval
@@ -300,9 +300,9 @@ class Scheduler:
                                       producer=producer,
                                       producer=producer,
                                       **entry.options)
                                       **entry.options)
         except Exception as exc:
         except Exception as exc:
-            reraise(SchedulingError, SchedulingError(
+            raise SchedulingError(
                 "Couldn't apply scheduled task {0.name}: {exc}".format(
                 "Couldn't apply scheduled task {0.name}: {exc}".format(
-                    entry, exc=exc)), sys.exc_info()[2])
+                    entry, exc=exc)).with_traceback(sys.exc_info()[2])
         finally:
         finally:
             self._tasks_since_sync += 1
             self._tasks_since_sync += 1
             if self.should_sync():
             if self.should_sync():
@@ -342,7 +342,7 @@ class Scheduler:
     def update_from_dict(self, dict_):
     def update_from_dict(self, dict_):
         self.schedule.update({
         self.schedule.update({
             name: self._maybe_entry(name, entry)
             name: self._maybe_entry(name, entry)
-            for name, entry in items(dict_)
+            for name, entry in dict_.items()
         })
         })
 
 
     def merge_inplace(self, b):
     def merge_inplace(self, b):
@@ -468,7 +468,7 @@ class PersistentScheduler(Scheduler):
         self._store.update(__version__=__version__, tz=tz, utc_enabled=utc)
         self._store.update(__version__=__version__, tz=tz, utc_enabled=utc)
         self.sync()
         self.sync()
         debug('Current schedule:\n' + '\n'.join(
         debug('Current schedule:\n' + '\n'.join(
-            repr(entry) for entry in values(entries)))
+            repr(entry) for entry in entries.values()))
 
 
     def get_schedule(self):
     def get_schedule(self):
         return self._store['entries']
         return self._store['entries']

+ 3 - 4
celery/bin/amqp.py

@@ -18,7 +18,6 @@ from kombu.utils.encoding import safe_str
 from celery.utils.functional import padlist
 from celery.utils.functional import padlist
 
 
 from celery.bin.base import Command
 from celery.bin.base import Command
-from celery.five import string_t
 from celery.utils.serialization import strtobool
 from celery.utils.serialization import strtobool
 
 
 __all__ = ['AMQPAdmin', 'AMQShell', 'Spec', 'amqp']
 __all__ = ['AMQPAdmin', 'AMQShell', 'Spec', 'amqp']
@@ -251,7 +250,7 @@ class AMQShell(cmd.Cmd):
 
 
         Look-up order is: :attr:`builtins` -> :attr:`amqp`.
         Look-up order is: :attr:`builtins` -> :attr:`amqp`.
         """
         """
-        if isinstance(arglist, string_t):
+        if isinstance(arglist, str):
             arglist = shlex.split(safe_str(arglist))
             arglist = shlex.split(safe_str(arglist))
         if cmd in self.builtins:
         if cmd in self.builtins:
             return getattr(self, self.builtins[cmd])(*arglist)
             return getattr(self, self.builtins[cmd])(*arglist)
@@ -271,7 +270,7 @@ class AMQShell(cmd.Cmd):
 
 
     def onecmd(self, line):
     def onecmd(self, line):
         """Parse line and execute command."""
         """Parse line and execute command."""
-        if isinstance(line, string_t):
+        if isinstance(line, str):
             line = shlex.split(safe_str(line))
             line = shlex.split(safe_str(line))
         cmd, arg, line = self.parseline(line)
         cmd, arg, line = self.parseline(line)
         if not line:
         if not line:
@@ -289,7 +288,7 @@ class AMQShell(cmd.Cmd):
     def respond(self, retval):
     def respond(self, retval):
         """What to do with the return value of a command."""
         """What to do with the return value of a command."""
         if retval is not None:
         if retval is not None:
-            if isinstance(retval, string_t):
+            if isinstance(retval, str):
                 self.say(retval)
                 self.say(retval)
             else:
             else:
                 self.say(pprint.pformat(retval))
                 self.say(pprint.pformat(retval))

+ 6 - 6
celery/bin/base.py

@@ -11,6 +11,7 @@ import json
 
 
 from collections import defaultdict
 from collections import defaultdict
 from heapq import heappush
 from heapq import heappush
+from inspect import getfullargspec
 from optparse import (
 from optparse import (
     OptionParser, OptionGroup, IndentedHelpFormatter, make_option as Option,
     OptionParser, OptionGroup, IndentedHelpFormatter, make_option as Option,
 )
 )
@@ -19,7 +20,6 @@ from pprint import pformat
 from celery import VERSION_BANNER, Celery, maybe_patch_concurrency
 from celery import VERSION_BANNER, Celery, maybe_patch_concurrency
 from celery import signals
 from celery import signals
 from celery.exceptions import CDeprecationWarning, CPendingDeprecationWarning
 from celery.exceptions import CDeprecationWarning, CPendingDeprecationWarning
-from celery.five import getfullargspec, items, string, string_t
 from celery.platforms import EX_FAILURE, EX_OK, EX_USAGE
 from celery.platforms import EX_FAILURE, EX_OK, EX_USAGE
 from celery.utils import term
 from celery.utils import term
 from celery.utils import text
 from celery.utils import text
@@ -269,7 +269,7 @@ class Command:
         pass
         pass
 
 
     def expanduser(self, value):
     def expanduser(self, value):
-        if isinstance(value, string_t):
+        if isinstance(value, str):
             return os.path.expanduser(value)
             return os.path.expanduser(value)
         return value
         return value
 
 
@@ -321,7 +321,7 @@ class Command:
         if options:
         if options:
             options = {
             options = {
                 k: self.expanduser(v)
                 k: self.expanduser(v)
-                for k, v in items(vars(options)) if not k.startswith('_')
+                for k, v in vars(options).items() if not k.startswith('_')
             }
             }
         args = [self.expanduser(arg) for arg in args]
         args = [self.expanduser(arg) for arg in args]
         self.check_args(args)
         self.check_args(args)
@@ -376,7 +376,7 @@ class Command:
     def prepare_parser(self, parser):
     def prepare_parser(self, parser):
         docs = [self.parse_doc(doc) for doc in (self.doc, __doc__) if doc]
         docs = [self.parse_doc(doc) for doc in (self.doc, __doc__) if doc]
         for doc in docs:
         for doc in docs:
-            for long_opt, help in items(doc):
+            for long_opt, help in doc.items():
                 option = parser.get_option(long_opt)
                 option = parser.get_option(long_opt)
                 if option is not None:
                 if option is not None:
                     option.help = ' '.join(help).format(default=option.default)
                     option.help = ' '.join(help).format(default=option.default)
@@ -582,8 +582,8 @@ class Command:
                 return self.pretty_dict_ok_error(n)
                 return self.pretty_dict_ok_error(n)
             else:
             else:
                 return OK, json.dumps(n, sort_keys=True, indent=4)
                 return OK, json.dumps(n, sort_keys=True, indent=4)
-        if isinstance(n, string_t):
-            return OK, string(n)
+        if isinstance(n, str):
+            return OK, str(n)
         return OK, pformat(n)
         return OK, pformat(n)
 
 
     def say_chat(self, direction, title, body=''):
     def say_chat(self, direction, title, body=''):

+ 6 - 7
celery/bin/celery.py

@@ -267,7 +267,6 @@ from importlib import import_module
 from kombu.utils import json
 from kombu.utils import json
 
 
 from celery.app import defaults
 from celery.app import defaults
-from celery.five import keys, string_t, values
 from celery.platforms import EX_OK, EX_FAILURE, EX_UNAVAILABLE, EX_USAGE
 from celery.platforms import EX_OK, EX_FAILURE, EX_UNAVAILABLE, EX_USAGE
 from celery.utils import term
 from celery.utils import term
 from celery.utils import text
 from celery.utils import text
@@ -424,10 +423,10 @@ class call(Command):
                    queue=None, exchange=None, routing_key=None,
                    queue=None, exchange=None, routing_key=None,
                    eta=None, expires=None):
                    eta=None, expires=None):
         # arguments
         # arguments
-        args = json.loads(args) if isinstance(args, string_t) else args
-        kwargs = json.loads(kwargs) if isinstance(kwargs, string_t) else kwargs
+        args = json.loads(args) if isinstance(args, str) else args
+        kwargs = json.loads(kwargs) if isinstance(kwargs, str) else kwargs
 
 
-        # Expires can be int/float.
+        # expires can be int/float.
         try:
         try:
             expires = float(expires)
             expires = float(expires)
         except (TypeError, ValueError):
         except (TypeError, ValueError):
@@ -480,7 +479,7 @@ class purge(Command):
     def run(self, force=False, queues=None, exclude_queues=None, **kwargs):
     def run(self, force=False, queues=None, exclude_queues=None, **kwargs):
         queues = set(str_to_list(queues or []))
         queues = set(str_to_list(queues or []))
         exclude = set(str_to_list(exclude_queues or []))
         exclude = set(str_to_list(exclude_queues or []))
-        names = (queues or set(keys(self.app.amqp.queues))) - exclude
+        names = (queues or set(self.app.amqp.queues.keys())) - exclude
         qnum = len(names)
         qnum = len(names)
 
 
         messages = None
         messages = None
@@ -624,7 +623,7 @@ class _RemoteControl(Command):
         output_json = kwargs.get('json')
         output_json = kwargs.get('json')
         destination = kwargs.get('destination')
         destination = kwargs.get('destination')
         timeout = kwargs.get('timeout') or self.choices[method][0]
         timeout = kwargs.get('timeout') or self.choices[method][0]
-        if destination and isinstance(destination, string_t):
+        if destination and isinstance(destination, str):
             destination = [dest.strip() for dest in destination.split(',')]
             destination = [dest.strip() for dest in destination.split(',')]
 
 
         handler = getattr(self, method, self.call)
         handler = getattr(self, method, self.call)
@@ -875,7 +874,7 @@ class shell(Command):  # pragma: no cover
 
 
         if not without_tasks:
         if not without_tasks:
             self.locals.update({
             self.locals.update({
-                task.__name__: task for task in values(self.app.tasks)
+                task.__name__: task for task in self.app.tasks.values()
                 if not task.name.startswith('celery.')
                 if not task.name.startswith('celery.')
             })
             })
 
 

+ 1 - 2
celery/bin/graph.py

@@ -7,7 +7,6 @@ from __future__ import absolute_import, unicode_literals
 
 
 from operator import itemgetter
 from operator import itemgetter
 
 
-from celery.five import items
 from celery.utils.graph import DependencyGraph, GraphFormatter
 from celery.utils.graph import DependencyGraph, GraphFormatter
 
 
 from .base import Command
 from .base import Command
@@ -148,7 +147,7 @@ class graph(Command):
         except KeyError:
         except KeyError:
             replies = self.app.control.inspect().stats()
             replies = self.app.control.inspect().stats()
             workers, threads = [], []
             workers, threads = [], []
-            for worker, reply in items(replies):
+            for worker, reply in replies.items():
                 workers.append(worker)
                 workers.append(worker)
                 threads.append(reply['pool']['max-concurrency'])
                 threads.append(reply['pool']['max-concurrency'])
 
 

+ 3 - 4
celery/bin/multi.py

@@ -110,7 +110,6 @@ from kombu.utils import cached_property
 from kombu.utils.encoding import from_utf8
 from kombu.utils.encoding import from_utf8
 
 
 from celery import VERSION_BANNER
 from celery import VERSION_BANNER
-from celery.five import items
 from celery.platforms import Pidfile, IS_WINDOWS
 from celery.platforms import Pidfile, IS_WINDOWS
 from celery.utils import term
 from celery.utils import term
 from celery.utils.nodenames import (
 from celery.utils.nodenames import (
@@ -468,7 +467,7 @@ def _args_for_node(p, name, prefix, suffix, cmd, append, options):
 
 
     argv = ([expand(cmd)] +
     argv = ([expand(cmd)] +
             [format_opt(opt, expand(value))
             [format_opt(opt, expand(value))
-                for opt, value in items(p.optmerge(ns, options))] +
+                for opt, value in p.optmerge(ns, options).items())] +
             [p.passthrough])
             [p.passthrough])
     if append:
     if append:
         argv.append(expand(append))
         argv.append(expand(append))
@@ -508,7 +507,7 @@ def _get_ranges(names):
 def _update_ns_opts(p, names):
 def _update_ns_opts(p, names):
     # Numbers in args always refers to the index in the list of names.
     # Numbers in args always refers to the index in the list of names.
     # (e.g. `start foo bar baz -c:1` where 1 is foo, 2 is bar, and so on).
     # (e.g. `start foo bar baz -c:1` where 1 is foo, 2 is bar, and so on).
-    for ns_name, ns_opts in list(items(p.namespaces)):
+    for ns_name, ns_opts in list(p.namespaces.items()):
         if ns_name.isdigit():
         if ns_name.isdigit():
             ns_index = int(ns_name) - 1
             ns_index = int(ns_name) - 1
             if ns_index < 0:
             if ns_index < 0:
@@ -520,7 +519,7 @@ def _update_ns_opts(p, names):
 
 
 
 
 def _update_ns_ranges(p, ranges):
 def _update_ns_ranges(p, ranges):
-    for ns_name, ns_opts in list(items(p.namespaces)):
+    for ns_name, ns_opts in list(p.namespaces.items()):
         if ',' in ns_name or (ranges and '-' in ns_name):
         if ',' in ns_name or (ranges and '-' in ns_name):
             for subns in parse_ns_range(ns_name, ranges):
             for subns in parse_ns_range(ns_name, ranges):
                 p.namespaces[subns].update(ns_opts)
                 p.namespaces[subns].update(ns_opts)

+ 1 - 2
celery/bin/worker.py

@@ -170,7 +170,6 @@ from optparse import OptionGroup
 from celery import concurrency
 from celery import concurrency
 from celery.bin.base import Command, daemon_options
 from celery.bin.base import Command, daemon_options
 from celery.bin.celeryd_detach import detached_celeryd
 from celery.bin.celeryd_detach import detached_celeryd
-from celery.five import string_t
 from celery.platforms import maybe_drop_privileges
 from celery.platforms import maybe_drop_privileges
 from celery.utils.log import LOG_LEVELS, mlevel
 from celery.utils.log import LOG_LEVELS, mlevel
 from celery.utils.nodenames import default_nodename
 from celery.utils.nodenames import default_nodename
@@ -231,7 +230,7 @@ class worker(Command):
             except KeyError:  # pragma: no cover
             except KeyError:  # pragma: no cover
                 self.die('Unknown level {0!r}. Please use one of {1}.'.format(
                 self.die('Unknown level {0!r}. Please use one of {1}.'.format(
                     loglevel, '|'.join(
                     loglevel, '|'.join(
-                        l for l in LOG_LEVELS if isinstance(l, string_t))))
+                        l for l in LOG_LEVELS if isinstance(l, str))))
 
 
         worker = self.app.Worker(
         worker = self.app.Worker(
             hostname=hostname, pool_cls=pool_cls, loglevel=loglevel,
             hostname=hostname, pool_cls=pool_cls, loglevel=loglevel,

+ 8 - 10
celery/bootsteps.py

@@ -9,7 +9,6 @@ from kombu.common import ignore_errors
 from kombu.utils import symbol_by_name
 from kombu.utils import symbol_by_name
 from kombu.utils.encoding import bytes_to_str
 from kombu.utils.encoding import bytes_to_str
 
 
-from .five import bytes_if_py2, values, with_metaclass
 from .utils.graph import DependencyGraph, GraphFormatter
 from .utils.graph import DependencyGraph, GraphFormatter
 from .utils.imports import instantiate, qualname
 from .utils.imports import instantiate, qualname
 from .utils.log import get_logger
 from .utils.log import get_logger
@@ -225,12 +224,12 @@ class Blueprint:
         return self.steps[name]
         return self.steps[name]
 
 
     def _find_last(self):
     def _find_last(self):
-        return next((C for C in values(self.steps) if C.last), None)
+        return next((C for C in self.steps.values() if C.last), None)
 
 
     def _firstpass(self, steps):
     def _firstpass(self, steps):
-        for step in values(steps):
+        for step in steps.values():
             step.requires = [symbol_by_name(dep) for dep in step.requires]
             step.requires = [symbol_by_name(dep) for dep in step.requires]
-        stream = deque(step.requires for step in values(steps))
+        stream = deque(step.requires for step in steps.values())
         while stream:
         while stream:
             for node in stream.popleft():
             for node in stream.popleft():
                 node = symbol_by_name(node)
                 node = symbol_by_name(node)
@@ -241,7 +240,7 @@ class Blueprint:
     def _finalize_steps(self, steps):
     def _finalize_steps(self, steps):
         last = self._find_last()
         last = self._find_last()
         self._firstpass(steps)
         self._firstpass(steps)
-        it = ((C, C.requires) for C in values(steps))
+        it = ((C, C.requires) for C in steps.values())
         G = self.graph = DependencyGraph(
         G = self.graph = DependencyGraph(
             it, formatter=self.GraphFormatter(root=last),
             it, formatter=self.GraphFormatter(root=last),
         )
         )
@@ -285,14 +284,13 @@ class StepType(type):
         return super(StepType, cls).__new__(cls, name, bases, attrs)
         return super(StepType, cls).__new__(cls, name, bases, attrs)
 
 
     def __str__(self):
     def __str__(self):
-        return bytes_if_py2(self.name)
+        return self.name
 
 
     def __repr__(self):
     def __repr__(self):
-        return bytes_if_py2('step:{0.name}{{{0.requires!r}}}'.format(self))
+        return 'step:{0.name}{{{0.requires!r}}}'.format(self)
 
 
 
 
-@with_metaclass(StepType)
-class Step:
+class Step(metaclass=StepType):
     """A Bootstep.
     """A Bootstep.
 
 
     The :meth:`__init__` method is called when the step
     The :meth:`__init__` method is called when the step
@@ -347,7 +345,7 @@ class Step:
         pass
         pass
 
 
     def __repr__(self):
     def __repr__(self):
-        return bytes_if_py2('<step: {0.alias}>'.format(self))
+        return '<step: {0.alias}>'.format(self)
 
 
     @property
     @property
     def alias(self):
     def alias(self):

+ 8 - 9
celery/concurrency/asynpool.py

@@ -24,7 +24,7 @@ import struct
 import sys
 import sys
 import time
 import time
 
 
-from collections import deque, namedtuple
+from collections import Counter, deque, namedtuple
 from io import BytesIO
 from io import BytesIO
 from numbers import Integral
 from numbers import Integral
 from pickle import HIGHEST_PROTOCOL
 from pickle import HIGHEST_PROTOCOL
@@ -41,7 +41,6 @@ from kombu.utils import fxrange
 from kombu.utils.eventio import SELECT_BAD_FD
 from kombu.utils.eventio import SELECT_BAD_FD
 from vine import promise
 from vine import promise
 
 
-from celery.five import Counter, items, values
 from celery.utils.functional import noop
 from celery.utils.functional import noop
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 from celery.worker import state as worker_state
 from celery.worker import state as worker_state
@@ -469,7 +468,7 @@ class AsynPool(_pool.Pool):
 
 
         # Timers include calling maintain_pool at a regular interval
         # Timers include calling maintain_pool at a regular interval
         # to be certain processes are restarted.
         # to be certain processes are restarted.
-        for handler, interval in items(self.timers):
+        for handler, interval in self.timers.items():
             hub.call_repeatedly(interval, handler)
             hub.call_repeatedly(interval, handler)
 
 
         hub.on_tick.add(self.on_poll_start)
         hub.on_tick.add(self.on_poll_start)
@@ -569,7 +568,7 @@ class AsynPool(_pool.Pool):
             # job._write_to and job._scheduled_for attributes used to recover
             # job._write_to and job._scheduled_for attributes used to recover
             # message boundaries when processes exit.
             # message boundaries when processes exit.
             infd = proc.inqW_fd
             infd = proc.inqW_fd
-            for job in values(cache):
+            for job in cache.values():
                 if job._write_to and job._write_to.inqW_fd == infd:
                 if job._write_to and job._write_to.inqW_fd == infd:
                     job._write_to = proc
                     job._write_to = proc
                 if job._scheduled_for and job._scheduled_for.inqW_fd == infd:
                 if job._scheduled_for and job._scheduled_for.inqW_fd == infd:
@@ -928,7 +927,7 @@ class AsynPool(_pool.Pool):
         if self._state == TERMINATE:
         if self._state == TERMINATE:
             return
             return
         # cancel all tasks that have not been accepted so that NACK is sent.
         # cancel all tasks that have not been accepted so that NACK is sent.
-        for job in values(self._cache):
+        for job in self._cache.values():
             if not job._accepted:
             if not job._accepted:
                 job._cancel()
                 job._cancel()
 
 
@@ -947,7 +946,7 @@ class AsynPool(_pool.Pool):
                 # flush outgoing buffers
                 # flush outgoing buffers
                 intervals = fxrange(0.01, 0.1, 0.01, repeatlast=True)
                 intervals = fxrange(0.01, 0.1, 0.01, repeatlast=True)
                 owned_by = {}
                 owned_by = {}
-                for job in values(self._cache):
+                for job in self._cache.values():
                     writer = _get_job_writer(job)
                     writer = _get_job_writer(job)
                     if writer is not None:
                     if writer is not None:
                         owned_by[writer] = job
                         owned_by[writer] = job
@@ -1009,7 +1008,7 @@ class AsynPool(_pool.Pool):
         Here we will find an unused slot, as there should always
         Here we will find an unused slot, as there should always
         be one available when we start a new process.
         be one available when we start a new process.
         """
         """
-        return next(q for q, owner in items(self._queues)
+        return next(q for q, owner in self._queues.items()
                     if owner is None)
                     if owner is None)
 
 
     def on_grow(self, n):
     def on_grow(self, n):
@@ -1078,7 +1077,7 @@ class AsynPool(_pool.Pool):
     def human_write_stats(self):
     def human_write_stats(self):
         if self.write_stats is None:
         if self.write_stats is None:
             return 'N/A'
             return 'N/A'
-        vals = list(values(self.write_stats))
+        vals = list(self.write_stats.values())
         total = sum(vals)
         total = sum(vals)
 
 
         def per(v, total):
         def per(v, total):
@@ -1136,7 +1135,7 @@ class AsynPool(_pool.Pool):
     def _find_worker_queues(self, proc):
     def _find_worker_queues(self, proc):
         """Find the queues owned by ``proc``."""
         """Find the queues owned by ``proc``."""
         try:
         try:
-            return next(q for q, owner in items(self._queues)
+            return next(q for q, owner in self._queues.items()
                         if owner == proc)
                         if owner == proc)
         except StopIteration:
         except StopIteration:
             raise ValueError(proc)
             raise ValueError(proc)

+ 3 - 3
celery/concurrency/base.py

@@ -6,12 +6,13 @@ import logging
 import os
 import os
 import sys
 import sys
 
 
+from time import monotonic
+
 from billiard.einfo import ExceptionInfo
 from billiard.einfo import ExceptionInfo
 from billiard.exceptions import WorkerLostError
 from billiard.exceptions import WorkerLostError
 from kombu.utils.encoding import safe_repr
 from kombu.utils.encoding import safe_repr
 
 
 from celery.exceptions import WorkerShutdown, WorkerTerminate
 from celery.exceptions import WorkerShutdown, WorkerTerminate
-from celery.five import monotonic, reraise
 from celery.utils import timer2
 from celery.utils import timer2
 from celery.utils.text import truncate
 from celery.utils.text import truncate
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
@@ -36,8 +37,7 @@ def apply_target(target, args=(), kwargs={}, callback=None,
         raise
         raise
     except BaseException as exc:
     except BaseException as exc:
         try:
         try:
-            reraise(WorkerLostError, WorkerLostError(repr(exc)),
-                    sys.exc_info()[2])
+            raise WorkerLostError(repr(exc)).with_traceback(sys.exc_info()[2])
         except WorkerLostError:
         except WorkerLostError:
             callback(ExceptionInfo())
             callback(ExceptionInfo())
     else:
     else:

+ 1 - 2
celery/concurrency/prefork.py

@@ -16,7 +16,6 @@ from celery import signals
 from celery._state import set_default_app, _set_task_join_will_block
 from celery._state import set_default_app, _set_task_join_will_block
 from celery.app import trace
 from celery.app import trace
 from celery.concurrency.base import BasePool
 from celery.concurrency.base import BasePool
-from celery.five import items
 from celery.utils.functional import noop
 from celery.utils.functional import noop
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 
 
@@ -73,7 +72,7 @@ def process_initializer(app, hostname):
         trace._tasks = app._tasks  # enables fast_trace_task optimization.
         trace._tasks = app._tasks  # enables fast_trace_task optimization.
     # rebuild execution handler for all tasks.
     # rebuild execution handler for all tasks.
     from celery.app.trace import build_tracer
     from celery.app.trace import build_tracer
-    for name, task in items(app.tasks):
+    for name, task in app.tasks.items():
         task.__trace__ = build_tracer(name, task, app.loader, hostname,
         task.__trace__ = build_tracer(name, task, app.loader, hostname,
                                       app=app)
                                       app=app)
     from celery.worker import state as worker_state
     from celery.worker import state as worker_state

+ 5 - 6
celery/contrib/migrate.py

@@ -12,7 +12,6 @@ from kombu.common import maybe_declare
 from kombu.utils.encoding import ensure_bytes
 from kombu.utils.encoding import ensure_bytes
 
 
 from celery.app import app_or_default
 from celery.app import app_or_default
-from celery.five import string, string_t
 from celery.utils.nodenames import worker_direct
 from celery.utils.nodenames import worker_direct
 
 
 __all__ = [
 __all__ = [
@@ -41,7 +40,7 @@ class State:
     def strtotal(self):
     def strtotal(self):
         if not self.total_apx:
         if not self.total_apx:
             return '?'
             return '?'
-        return string(self.total_apx)
+        return str(self.total_apx)
 
 
     def __repr__(self):
     def __repr__(self):
         if self.filtered:
         if self.filtered:
@@ -113,7 +112,7 @@ def migrate_tasks(source, dest, migrate=migrate_task, app=None,
 
 
 
 
 def _maybe_queue(app, q):
 def _maybe_queue(app, q):
-    if isinstance(q, string_t):
+    if isinstance(q, str):
         return app.amqp.queues[q]
         return app.amqp.queues[q]
     return q
     return q
 
 
@@ -167,7 +166,7 @@ def move(predicate, connection=None, exchange=None, routing_key=None,
     .. code-block:: python
     .. code-block:: python
 
 
         def transform(value):
         def transform(value):
-            if isinstance(value, string_t):
+            if isinstance(value, str):
                 return Queue(value, Exchange(value), value)
                 return Queue(value, Exchange(value), value)
             return value
             return value
 
 
@@ -225,7 +224,7 @@ def task_id_in(ids, body, message):
 
 
 
 
 def prepare_queues(queues):
 def prepare_queues(queues):
-    if isinstance(queues, string_t):
+    if isinstance(queues, str):
         queues = queues.split(',')
         queues = queues.split(',')
     if isinstance(queues, list):
     if isinstance(queues, list):
         queues = dict(tuple(islice(cycle(q.split(':')), None, 2))
         queues = dict(tuple(islice(cycle(q.split(':')), None, 2))
@@ -243,7 +242,7 @@ def start_filter(app, conn, filter, limit=None, timeout=1.0,
     queues = prepare_queues(queues)
     queues = prepare_queues(queues)
     consume_from = [_maybe_queue(app, q)
     consume_from = [_maybe_queue(app, q)
                     for q in consume_from or list(queues)]
                     for q in consume_from or list(queues)]
-    if isinstance(tasks, string_t):
+    if isinstance(tasks, str):
         tasks = set(tasks.split(','))
         tasks = set(tasks.split(','))
     if tasks is None:
     if tasks is None:
         tasks = set()
         tasks = set()

+ 0 - 2
celery/contrib/rdb.py

@@ -52,8 +52,6 @@ from pdb import Pdb
 
 
 from billiard.process import current_process
 from billiard.process import current_process
 
 
-from celery.five import range
-
 __all__ = [
 __all__ = [
     'CELERY_RDB_HOST', 'CELERY_RDB_PORT', 'DEFAULT_PORT',
     'CELERY_RDB_HOST', 'CELERY_RDB_PORT', 'DEFAULT_PORT',
     'Rdb', 'debugger', 'set_trace',
     'Rdb', 'debugger', 'set_trace',

+ 1 - 2
celery/contrib/sphinx.py

@@ -30,13 +30,12 @@ Use ``.. autotask::`` to manually document a task.
 """
 """
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 
 
-from inspect import formatargspec
+from inspect import formatargspec, getfullargspec
 
 
 from sphinx.domains.python import PyModulelevel
 from sphinx.domains.python import PyModulelevel
 from sphinx.ext.autodoc import FunctionDocumenter
 from sphinx.ext.autodoc import FunctionDocumenter
 
 
 from celery.app.task import BaseTask
 from celery.app.task import BaseTask
-from celery.five import getfullargspec
 
 
 
 
 class TaskDocumenter(FunctionDocumenter):
 class TaskDocumenter(FunctionDocumenter):

+ 1 - 2
celery/events/__init__.py

@@ -22,7 +22,6 @@ from kombu.mixins import ConsumerMixin
 from kombu.utils import cached_property, uuid
 from kombu.utils import cached_property, uuid
 
 
 from celery.app import app_or_default
 from celery.app import app_or_default
-from celery.five import items
 from celery.utils.functional import dictfilter
 from celery.utils.functional import dictfilter
 from celery.utils.nodenames import anon_nodename
 from celery.utils.nodenames import anon_nodename
 from celery.utils.timeutils import adjust_timestamp, utcoffset, maybe_s_to_ms
 from celery.utils.timeutils import adjust_timestamp, utcoffset, maybe_s_to_ms
@@ -262,7 +261,7 @@ class EventDispatcher:
                 self._outbound_buffer.clear()
                 self._outbound_buffer.clear()
         if groups:
         if groups:
             with self.mutex:
             with self.mutex:
-                for group, events in items(self._group_buffer):
+                for group, events in self._group_buffer.items():
                     self._publish(events, self.producer, '%s.multi' % group)
                     self._publish(events, self.producer, '%s.multi' % group)
                     events[:] = []  # list.clear
                     events[:] = []  # list.clear
 
 

+ 7 - 6
celery/events/cursesmon.py

@@ -15,7 +15,6 @@ from math import ceil
 from celery import VERSION_BANNER
 from celery import VERSION_BANNER
 from celery import states
 from celery import states
 from celery.app import app_or_default
 from celery.app import app_or_default
-from celery.five import items, values
 from celery.utils.text import abbr, abbrtask
 from celery.utils.text import abbr, abbrtask
 
 
 __all__ = ['CursesMonitor', 'evtop']
 __all__ = ['CursesMonitor', 'evtop']
@@ -207,7 +206,7 @@ class CursesMonitor:  # pragma: no cover
             for subreply in reply:
             for subreply in reply:
                 curline = next(y)
                 curline = next(y)
 
 
-                host, response = next(items(subreply))
+                host, response = next(subreply.items())
                 host = '{0}: '.format(host)
                 host = '{0}: '.format(host)
                 self.win.addstr(curline, 3, host, curses.A_BOLD)
                 self.win.addstr(curline, 3, host, curses.A_BOLD)
                 attr = curses.A_NORMAL
                 attr = curses.A_NORMAL
@@ -390,7 +389,7 @@ class CursesMonitor:  # pragma: no cover
                         info['result'] = abbr(info['result'], 16)
                         info['result'] = abbr(info['result'], 16)
                     info = ' '.join(
                     info = ' '.join(
                         '{0}={1}'.format(key, value)
                         '{0}={1}'.format(key, value)
-                        for key, value in items(info)
+                        for key, value in info.items()
                     )
                     )
                     detail = '... -> key i'
                     detail = '... -> key i'
                 infowin = abbr(info,
                 infowin = abbr(info,
@@ -419,8 +418,10 @@ class CursesMonitor:  # pragma: no cover
                 my - 3, x + len(self.info_str),
                 my - 3, x + len(self.info_str),
                 STATUS_SCREEN.format(
                 STATUS_SCREEN.format(
                     s=self.state,
                     s=self.state,
-                    w_alive=len([w for w in values(self.state.workers)
-                                 if w.alive]),
+                    w_alive=len([
+                        w for w in self.state.workers.values()
+                        if w.alive
+                    ]),
                     w_all=len(self.state.workers),
                     w_all=len(self.state.workers),
                 ),
                 ),
                 curses.A_DIM,
                 curses.A_DIM,
@@ -479,7 +480,7 @@ class CursesMonitor:  # pragma: no cover
 
 
     @property
     @property
     def workers(self):
     def workers(self):
-        return [hostname for hostname, w in items(self.state.workers)
+        return [hostname for hostname, w in self.state.workers.items()
                 if w.alive]
                 if w.alive]
 
 
 
 

+ 10 - 11
celery/events/state.py

@@ -31,7 +31,6 @@ from kombu.clocks import timetuple
 from kombu.utils import cached_property
 from kombu.utils import cached_property
 
 
 from celery import states
 from celery import states
-from celery.five import items, values
 from celery.utils.functional import LRUCache, memoize, pass1
 from celery.utils.functional import LRUCache, memoize, pass1
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 
 
@@ -187,10 +186,10 @@ class Worker:
 
 
         def event(type_, timestamp=None,
         def event(type_, timestamp=None,
                   local_received=None, fields=None,
                   local_received=None, fields=None,
-                  max_drift=HEARTBEAT_DRIFT_MAX, items=items, abs=abs, int=int,
+                  max_drift=HEARTBEAT_DRIFT_MAX, abs=abs, int=int,
                   insort=bisect.insort, len=len):
                   insort=bisect.insort, len=len):
             fields = fields or {}
             fields = fields or {}
-            for k, v in items(fields):
+            for k, v in fields.items():
                 _set(self, k, v)
                 _set(self, k, v)
             if type_ == 'offline':
             if type_ == 'offline':
                 heartbeats[:] = []
                 heartbeats[:] = []
@@ -212,7 +211,7 @@ class Worker:
         return event
         return event
 
 
     def update(self, f, **kw):
     def update(self, f, **kw):
-        for k, v in items(dict(f, **kw) if kw else f):
+        for k, v in (dict(f, **kw) if kw else f).items():
             setattr(self, k, v)
             setattr(self, k, v)
 
 
     def __repr__(self):
     def __repr__(self):
@@ -294,7 +293,7 @@ class Task:
             self.__dict__.update(kwargs)
             self.__dict__.update(kwargs)
 
 
     def event(self, type_, timestamp=None, local_received=None, fields=None,
     def event(self, type_, timestamp=None, local_received=None, fields=None,
-              precedence=states.precedence, items=items,
+              precedence=states.precedence,
               setattr=setattr, task_event_to_state=TASK_EVENT_TO_STATE.get,
               setattr=setattr, task_event_to_state=TASK_EVENT_TO_STATE.get,
               RETRY=states.RETRY):
               RETRY=states.RETRY):
         fields = fields or {}
         fields = fields or {}
@@ -315,7 +314,7 @@ class Task:
             keep = self.merge_rules.get(state)
             keep = self.merge_rules.get(state)
             if keep is not None:
             if keep is not None:
                 fields = {
                 fields = {
-                    k: v for k, v in items(fields) if k in keep
+                    k: v for k, v in fields.items() if k in keep
                 }
                 }
         else:
         else:
             fields.update(state=state, timestamp=timestamp)
             fields.update(state=state, timestamp=timestamp)
@@ -618,12 +617,12 @@ class State:
     def rebuild_taskheap(self, timetuple=timetuple):
     def rebuild_taskheap(self, timetuple=timetuple):
         heap = self._taskheap[:] = [
         heap = self._taskheap[:] = [
             timetuple(t.clock, t.timestamp, t.origin, ref(t))
             timetuple(t.clock, t.timestamp, t.origin, ref(t))
-            for t in values(self.tasks)
+            for t in self.tasks.values()
         ]
         ]
         heap.sort()
         heap.sort()
 
 
     def itertasks(self, limit=None):
     def itertasks(self, limit=None):
-        for index, row in enumerate(items(self.tasks)):
+        for index, row in enumerate(self.tasks.items()):
             yield row
             yield row
             if limit and index + 1 >= limit:
             if limit and index + 1 >= limit:
                 break
                 break
@@ -677,7 +676,7 @@ class State:
 
 
     def alive_workers(self):
     def alive_workers(self):
         """Return a list of (seemingly) alive workers."""
         """Return a list of (seemingly) alive workers."""
-        return (w for w in values(self.workers) if w.alive)
+        return (w for w in self.workers.values() if w.alive)
 
 
     def __repr__(self):
     def __repr__(self):
         return R_STATE.format(self)
         return R_STATE.format(self)
@@ -693,9 +692,9 @@ class State:
 
 
 
 
 def _serialize_Task_WeakSet_Mapping(mapping):
 def _serialize_Task_WeakSet_Mapping(mapping):
-    return {name: [t.id for t in tasks] for name, tasks in items(mapping)}
+    return {name: [t.id for t in tasks] for name, tasks in mapping.items()}
 
 
 
 
 def _deserialize_Task_WeakSet_Mapping(mapping, tasks):
 def _deserialize_Task_WeakSet_Mapping(mapping, tasks):
     return {name: WeakSet(tasks[i] for i in ids if i in tasks)
     return {name: WeakSet(tasks[i] for i in ids if i in tasks)
-            for name, ids in items(mapping or {})}
+            for name, ids in (mapping or {}).items()}

+ 1 - 3
celery/exceptions.py

@@ -4,8 +4,6 @@ from __future__ import absolute_import, unicode_literals
 
 
 import numbers
 import numbers
 
 
-from .five import string_t
-
 from billiard.exceptions import (  # noqa
 from billiard.exceptions import (  # noqa
     SoftTimeLimitExceeded, TimeLimitExceeded, WorkerLostError, Terminated,
     SoftTimeLimitExceeded, TimeLimitExceeded, WorkerLostError, Terminated,
 )
 )
@@ -64,7 +62,7 @@ class Retry(TaskPredicate):
     def __init__(self, message=None, exc=None, when=None, **kwargs):
     def __init__(self, message=None, exc=None, when=None, **kwargs):
         from kombu.utils.encoding import safe_repr
         from kombu.utils.encoding import safe_repr
         self.message = message
         self.message = message
-        if isinstance(exc, string_t):
+        if isinstance(exc, str):
             self.exc, self.excs = None, exc
             self.exc, self.excs = None, exc
         else:
         else:
             self.exc, self.excs = exc, safe_repr(exc) if exc else None
             self.exc, self.excs = exc, safe_repr(exc) if exc else None

+ 5 - 6
celery/loaders/base.py

@@ -13,7 +13,6 @@ from datetime import datetime
 from kombu.utils import json
 from kombu.utils import json
 
 
 from celery import signals
 from celery import signals
-from celery.five import reraise, string_t
 from celery.utils.collections import DictAttribute, force_mapping
 from celery.utils.collections import DictAttribute, force_mapping
 from celery.utils.functional import maybe_list
 from celery.utils.functional import maybe_list
 from celery.utils.imports import (
 from celery.utils.imports import (
@@ -129,7 +128,7 @@ class BaseLoader:
         self.on_worker_process_init()
         self.on_worker_process_init()
 
 
     def config_from_object(self, obj, silent=False):
     def config_from_object(self, obj, silent=False):
-        if isinstance(obj, string_t):
+        if isinstance(obj, str):
             try:
             try:
                 obj = self._smart_import(obj, imp=self.import_from_cwd)
                 obj = self._smart_import(obj, imp=self.import_from_cwd)
             except (ImportError, AttributeError):
             except (ImportError, AttributeError):
@@ -159,10 +158,10 @@ class BaseLoader:
             self.find_module(name)
             self.find_module(name)
         except NotAPackage:
         except NotAPackage:
             if name.endswith('.py'):
             if name.endswith('.py'):
-                reraise(NotAPackage, NotAPackage(CONFIG_WITH_SUFFIX.format(
-                    module=name, suggest=name[:-3])), sys.exc_info()[2])
-            reraise(NotAPackage, NotAPackage(CONFIG_INVALID_NAME.format(
-                module=name)), sys.exc_info()[2])
+                 raise NotAPackage(CONFIG_WITH_SUFFIX.format(
+                    module=name, suggest=name[:-3])).with_traceback(sys.exc_info()[2])
+            raise NotAPackage(CONFIG_INVALID_NAME.format(
+                module=name)).with_traceback(sys.exc_info()[2])
         else:
         else:
             return self.import_from_cwd(name)
             return self.import_from_cwd(name)
 
 

+ 2 - 4
celery/local.py

@@ -11,8 +11,6 @@ from __future__ import absolute_import, unicode_literals
 import importlib
 import importlib
 import sys
 import sys
 
 
-from .five import bytes_if_py2, string
-
 __all__ = ['Proxy', 'PromiseProxy', 'try_import', 'maybe_evaluate']
 __all__ = ['Proxy', 'PromiseProxy', 'try_import', 'maybe_evaluate']
 
 
 __module__ = __name__  # used by Proxy class body
 __module__ = __name__  # used by Proxy class body
@@ -35,7 +33,7 @@ def _default_cls_attr(name, type_, cls_value):
     def __get__(self, obj, cls=None):
     def __get__(self, obj, cls=None):
         return self.__getter(obj) if obj is not None else self
         return self.__getter(obj) if obj is not None else self
 
 
-    return type(bytes_if_py2(name), (type_,), {
+    return type(name, (type_,), {
         '__new__': __new__, '__get__': __get__,
         '__new__': __new__, '__get__': __get__,
     })
     })
 
 
@@ -292,7 +290,7 @@ class Proxy:
 
 
         def __unicode__(self):
         def __unicode__(self):
             try:
             try:
-                return string(self._get_current_object())
+                return str(self._get_current_object())
             except RuntimeError:  # pragma: no cover
             except RuntimeError:  # pragma: no cover
                 return repr(self)
                 return repr(self)
 
 

+ 6 - 7
celery/platforms.py

@@ -22,7 +22,6 @@ from kombu.utils.encoding import safe_str
 from contextlib import contextmanager
 from contextlib import contextmanager
 
 
 from .local import try_import
 from .local import try_import
-from .five import items, reraise, string_t
 
 
 try:
 try:
     from billiard.process import current_process
     from billiard.process import current_process
@@ -138,7 +137,7 @@ class Pidfile:
         try:
         try:
             self.write_pid()
             self.write_pid()
         except OSError as exc:
         except OSError as exc:
-            reraise(LockFailed, LockFailed(str(exc)), sys.exc_info()[2])
+            raise LockFailed(str(exc)).with_traceback(sys.exc_info()[2])
         return self
         return self
     __enter__ = acquire
     __enter__ = acquire
 
 
@@ -293,7 +292,7 @@ class DaemonContext:
     def __init__(self, pidfile=None, workdir=None, umask=None,
     def __init__(self, pidfile=None, workdir=None, umask=None,
                  fake=False, after_chdir=None, after_forkers=True,
                  fake=False, after_chdir=None, after_forkers=True,
                  **kwargs):
                  **kwargs):
-        if isinstance(umask, string_t):
+        if isinstance(umask, str):
             # octal or decimal, depending on initial zero.
             # octal or decimal, depending on initial zero.
             umask = int(umask, 8 if umask.startswith('0') else 10)
             umask = int(umask, 8 if umask.startswith('0') else 10)
         self.workdir = workdir or DAEMON_WORKDIR
         self.workdir = workdir or DAEMON_WORKDIR
@@ -619,8 +618,8 @@ class Signals:
         """Get signal number from signal name."""
         """Get signal number from signal name."""
         if isinstance(signal_name, numbers.Integral):
         if isinstance(signal_name, numbers.Integral):
             return signal_name
             return signal_name
-        if not isinstance(signal_name, string_t) \
-                or not signal_name.isupper():
+        if (not isinstance(signal_name, str) or
+                not signal_name.isupper()):
             raise TypeError('signal name must be uppercase string.')
             raise TypeError('signal name must be uppercase string.')
         if not signal_name.startswith('SIG'):
         if not signal_name.startswith('SIG'):
             signal_name = 'SIG' + signal_name
             signal_name = 'SIG' + signal_name
@@ -658,7 +657,7 @@ class Signals:
 
 
     def update(self, _d_=None, **sigmap):
     def update(self, _d_=None, **sigmap):
         """Set signal handlers from a mapping."""
         """Set signal handlers from a mapping."""
-        for signal_name, handler in items(dict(_d_ or {}, **sigmap)):
+        for signal_name, handler in dict(_d_ or {}, **sigmap).items():
             self[signal_name] = handler
             self[signal_name] = handler
 
 
 signals = Signals()
 signals = Signals()
@@ -707,7 +706,7 @@ else:
 
 
 def get_errno_name(n):
 def get_errno_name(n):
     """Get errno for string, e.g. ``ENOENT``."""
     """Get errno for string, e.g. ``ENOENT``."""
-    if isinstance(n, string_t):
+    if isinstance(n, str):
         return getattr(errno, n)
         return getattr(errno, n)
     return n
     return n
 
 

+ 4 - 4
celery/result.py

@@ -7,6 +7,7 @@ import time
 from collections import OrderedDict, deque
 from collections import OrderedDict, deque
 from contextlib import contextmanager
 from contextlib import contextmanager
 from copy import copy
 from copy import copy
+from time import monotonic
 
 
 from kombu.utils import cached_property
 from kombu.utils import cached_property
 from vine import Thenable, barrier, promise
 from vine import Thenable, barrier, promise
@@ -16,7 +17,6 @@ from . import states
 from ._state import _set_task_join_will_block, task_join_will_block
 from ._state import _set_task_join_will_block, task_join_will_block
 from .app import app_or_default
 from .app import app_or_default
 from .exceptions import ImproperlyConfigured, IncompleteStream, TimeoutError
 from .exceptions import ImproperlyConfigured, IncompleteStream, TimeoutError
-from .five import items, range, string_t, monotonic
 from .utils import deprecated
 from .utils import deprecated
 from .utils.graph import DependencyGraph, GraphFormatter
 from .utils.graph import DependencyGraph, GraphFormatter
 
 
@@ -317,7 +317,7 @@ class AsyncResult(ResultBase):
     def __eq__(self, other):
     def __eq__(self, other):
         if isinstance(other, AsyncResult):
         if isinstance(other, AsyncResult):
             return other.id == self.id
             return other.id == self.id
-        elif isinstance(other, string_t):
+        elif isinstance(other, str):
             return other == self.id
             return other == self.id
         return NotImplemented
         return NotImplemented
 
 
@@ -472,7 +472,7 @@ class ResultSet(ResultBase):
         Raises:
         Raises:
             KeyError: if the result is not a member.
             KeyError: if the result is not a member.
         """
         """
-        if isinstance(result, string_t):
+        if isinstance(result, str):
             result = self.app.AsyncResult(result)
             result = self.app.AsyncResult(result)
         try:
         try:
             self.results.remove(result)
             self.results.remove(result)
@@ -583,7 +583,7 @@ class ResultSet(ResultBase):
 
 
         while results:
         while results:
             removed = set()
             removed = set()
-            for task_id, result in items(results):
+            for task_id, result in results.items():
                 if result.ready():
                 if result.ready():
                     yield result.get(timeout=timeout and timeout - elapsed,
                     yield result.get(timeout=timeout and timeout - elapsed,
                                      propagate=propagate)
                                      propagate=propagate)

+ 2 - 3
celery/schedules.py

@@ -12,7 +12,6 @@ from datetime import datetime, timedelta
 from kombu.utils import cached_property
 from kombu.utils import cached_property
 
 
 from . import current_app
 from . import current_app
-from .five import range, string_t
 from .utils.collections import AttributeDict
 from .utils.collections import AttributeDict
 from .utils.timeutils import (
 from .utils.timeutils import (
     weekday, maybe_timedelta, remaining, humanize_seconds,
     weekday, maybe_timedelta, remaining, humanize_seconds,
@@ -272,7 +271,7 @@ class crontab_parser:
         return list(range(self.min_, self.max_ + self.min_))
         return list(range(self.min_, self.max_ + self.min_))
 
 
     def _expand_number(self, s):
     def _expand_number(self, s):
-        if isinstance(s, string_t) and s[0] == '-':
+        if isinstance(s, str) and s[0] == '-':
             raise self.ParseException('negative numbers not supported')
             raise self.ParseException('negative numbers not supported')
         try:
         try:
             i = int(s)
             i = int(s)
@@ -411,7 +410,7 @@ class crontab(schedule):
         """
         """
         if isinstance(cronspec, numbers.Integral):
         if isinstance(cronspec, numbers.Integral):
             result = {cronspec}
             result = {cronspec}
-        elif isinstance(cronspec, string_t):
+        elif isinstance(cronspec, str):
             result = crontab_parser(max_, min_).parse(cronspec)
             result = crontab_parser(max_, min_).parse(cronspec)
         elif isinstance(cronspec, set):
         elif isinstance(cronspec, set):
             result = cronspec
             result = cronspec

+ 1 - 2
celery/security/certificate.py

@@ -8,7 +8,6 @@ import os
 from kombu.utils.encoding import bytes_to_str
 from kombu.utils.encoding import bytes_to_str
 
 
 from celery.exceptions import SecurityError
 from celery.exceptions import SecurityError
-from celery.five import values
 
 
 from .utils import crypto, reraise_errors
 from .utils import crypto, reraise_errors
 
 
@@ -54,7 +53,7 @@ class CertStore:
 
 
     def itercerts(self):
     def itercerts(self):
         """an iterator over the certificates"""
         """an iterator over the certificates"""
-        for c in values(self._certs):
+        for c in self._certs.values():
             yield c
             yield c
 
 
     def __getitem__(self, id):
     def __getitem__(self, id):

+ 1 - 4
celery/security/utils.py

@@ -7,7 +7,6 @@ import sys
 from contextlib import contextmanager
 from contextlib import contextmanager
 
 
 from celery.exceptions import SecurityError
 from celery.exceptions import SecurityError
-from celery.five import reraise
 
 
 try:
 try:
     from OpenSSL import crypto
     from OpenSSL import crypto
@@ -24,6 +23,4 @@ def reraise_errors(msg='{0!r}', errors=None):
     try:
     try:
         yield
         yield
     except errors as exc:
     except errors as exc:
-        reraise(SecurityError,
-                SecurityError(msg.format(exc)),
-                sys.exc_info()[2])
+        raise SecurityError(msg.format(exc)).with_traceback(sys.exc_info()[2])

+ 2 - 3
celery/task/base.py

@@ -12,7 +12,7 @@ from kombu import Exchange
 
 
 from celery import current_app
 from celery import current_app
 from celery.app.task import Context, Task as BaseTask, _reprtask
 from celery.app.task import Context, Task as BaseTask, _reprtask
-from celery.five import class_property, reclassmethod, with_metaclass
+from celery.five import class_property, reclassmethod
 from celery.local import Proxy
 from celery.local import Proxy
 from celery.schedules import maybe_schedule
 from celery.schedules import maybe_schedule
 from celery.utils.log import get_task_logger
 from celery.utils.log import get_task_logger
@@ -119,8 +119,7 @@ class TaskType(type):
         return _reprtask(cls)
         return _reprtask(cls)
 
 
 
 
-@with_metaclass(TaskType)
-class Task(BaseTask):
+class Task(BaseTask, metaclass=TaskType):
     """Deprecated Task base class.
     """Deprecated Task base class.
 
 
     Modern applications should use :class:`celery.Task` instead.
     Modern applications should use :class:`celery.Task` instead.

+ 2 - 3
celery/tests/app/test_amqp.py

@@ -6,7 +6,6 @@ from kombu import Exchange, Queue
 
 
 from celery import uuid
 from celery import uuid
 from celery.app.amqp import Queues, utf8dict
 from celery.app.amqp import Queues, utf8dict
-from celery.five import keys
 from celery.utils.timeutils import to_utc
 from celery.utils.timeutils import to_utc
 
 
 from celery.tests.case import AppCase, Mock
 from celery.tests.case import AppCase, Mock
@@ -116,13 +115,13 @@ class test_Queues(AppCase):
         q = Queues()
         q = Queues()
         q.select(['foo', 'bar'])
         q.select(['foo', 'bar'])
         q.select_add('baz')
         q.select_add('baz')
-        self.assertItemsEqual(keys(q._consume_from), ['foo', 'bar', 'baz'])
+        self.assertItemsEqual(q._consume_from.keys(), ['foo', 'bar', 'baz'])
 
 
     def test_deselect(self):
     def test_deselect(self):
         q = Queues()
         q = Queues()
         q.select(['foo', 'bar'])
         q.select(['foo', 'bar'])
         q.deselect('bar')
         q.deselect('bar')
-        self.assertItemsEqual(keys(q._consume_from), ['foo'])
+        self.assertItemsEqual(q._consume_from.keys(), ['foo'])
 
 
     def test_with_ha_policy_compat(self):
     def test_with_ha_policy_compat(self):
         q = Queues(ha_policy='all')
         q = Queues(ha_policy='all')

+ 1 - 2
celery/tests/app/test_app.py

@@ -16,7 +16,6 @@ from celery import _state
 from celery.app import base as _appbase
 from celery.app import base as _appbase
 from celery.app import defaults
 from celery.app import defaults
 from celery.exceptions import ImproperlyConfigured
 from celery.exceptions import ImproperlyConfigured
-from celery.five import keys
 from celery.loaders.base import unconfigured
 from celery.loaders.base import unconfigured
 from celery.platforms import pyimplementation
 from celery.platforms import pyimplementation
 from celery.utils.serialization import pickle
 from celery.utils.serialization import pickle
@@ -323,7 +322,7 @@ class test_App(AppCase):
         with self.Celery(broker='foo://bar') as app:
         with self.Celery(broker='foo://bar') as app:
             app.conf.worker_agent = 'foo:Bar'
             app.conf.worker_agent = 'foo:Bar'
             self.assertFalse(app.configured)
             self.assertFalse(app.configured)
-            self.assertTrue(list(keys(app.conf)))
+            self.assertTrue(list(app.conf.keys()))
             self.assertFalse(app.configured)
             self.assertFalse(app.configured)
             self.assertIn('worker_agent', app.conf)
             self.assertIn('worker_agent', app.conf)
             self.assertFalse(app.configured)
             self.assertFalse(app.configured)

+ 2 - 3
celery/tests/app/test_beat.py

@@ -7,7 +7,6 @@ from pickle import dumps, loads
 
 
 from celery import beat
 from celery import beat
 from celery import uuid
 from celery import uuid
-from celery.five import keys, string_t
 from celery.schedules import schedule
 from celery.schedules import schedule
 from celery.utils.objects import Bunch
 from celery.utils.objects import Bunch
 
 
@@ -238,7 +237,7 @@ class test_Scheduler(AppCase):
 
 
     def test_info(self):
     def test_info(self):
         scheduler = mScheduler(app=self.app)
         scheduler = mScheduler(app=self.app)
-        self.assertIsInstance(scheduler.info, string_t)
+        self.assertIsInstance(scheduler.info, str)
 
 
     def test_maybe_entry(self):
     def test_maybe_entry(self):
         s = mScheduler(app=self.app)
         s = mScheduler(app=self.app)
@@ -440,7 +439,7 @@ class test_Service(AppCase):
         self.assertIsInstance(schedule, dict)
         self.assertIsInstance(schedule, dict)
         self.assertIsInstance(s.scheduler, beat.Scheduler)
         self.assertIsInstance(s.scheduler, beat.Scheduler)
         scheduled = list(schedule.keys())
         scheduled = list(schedule.keys())
-        for task_name in keys(sh['entries']):
+        for task_name in sh['entries'].keys():
             self.assertIn(task_name, scheduled)
             self.assertIn(task_name, scheduled)
 
 
         s.sync()
         s.sync()

+ 0 - 1
celery/tests/app/test_builtins.py

@@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals
 
 
 from celery import group, chord
 from celery import group, chord
 from celery.app import builtins
 from celery.app import builtins
-from celery.five import range
 from celery.utils.functional import pass1
 from celery.utils.functional import pass1
 
 
 from celery.tests.case import AppCase, ContextMock, Mock, patch
 from celery.tests.case import AppCase, ContextMock, Mock, patch

+ 2 - 3
celery/tests/app/test_defaults.py

@@ -8,7 +8,6 @@ from celery.app.defaults import (
     _OLD_DEFAULTS, _OLD_SETTING_KEYS, _TO_NEW_KEY, _TO_OLD_KEY,
     _OLD_DEFAULTS, _OLD_SETTING_KEYS, _TO_NEW_KEY, _TO_OLD_KEY,
     DEFAULTS, NAMESPACES, SETTING_KEYS
     DEFAULTS, NAMESPACES, SETTING_KEYS
 )
 )
-from celery.five import values
 
 
 from celery.tests.case import AppCase, mock
 from celery.tests.case import AppCase, mock
 
 
@@ -46,8 +45,8 @@ class test_defaults(AppCase):
         self.assertFalse(any(key.islower() for key in _TO_NEW_KEY))
         self.assertFalse(any(key.islower() for key in _TO_NEW_KEY))
         self.assertFalse(any(key.isupper() for key in SETTING_KEYS))
         self.assertFalse(any(key.isupper() for key in SETTING_KEYS))
         self.assertFalse(any(key.islower() for key in _OLD_SETTING_KEYS))
         self.assertFalse(any(key.islower() for key in _OLD_SETTING_KEYS))
-        self.assertFalse(any(value.isupper() for value in values(_TO_NEW_KEY)))
-        self.assertFalse(any(value.islower() for value in values(_TO_OLD_KEY)))
+        self.assertFalse(any(value.isupper() for value in _TO_NEW_KEY.values()))
+        self.assertFalse(any(value.islower() for value in _TO_OLD_KEY.values()))
 
 
         for key in _TO_NEW_KEY:
         for key in _TO_NEW_KEY:
             self.assertIn(key, _OLD_SETTING_KEYS)
             self.assertIn(key, _OLD_SETTING_KEYS)

+ 1 - 2
celery/tests/app/test_loaders.py

@@ -6,7 +6,6 @@ import warnings
 
 
 from celery import loaders
 from celery import loaders
 from celery.exceptions import NotConfigured
 from celery.exceptions import NotConfigured
-from celery.five import bytes_if_py2
 from celery.loaders import base
 from celery.loaders import base
 from celery.loaders import default
 from celery.loaders import default
 from celery.loaders.app import AppLoader
 from celery.loaders.app import AppLoader
@@ -136,7 +135,7 @@ class test_DefaultLoader(AppCase):
             pass
             pass
 
 
         configname = os.environ.get('CELERY_CONFIG_MODULE') or 'celeryconfig'
         configname = os.environ.get('CELERY_CONFIG_MODULE') or 'celeryconfig'
-        celeryconfig = ConfigModule(bytes_if_py2(configname))
+        celeryconfig = ConfigModule(configname)
         celeryconfig.imports = ('os', 'sys')
         celeryconfig.imports = ('os', 'sys')
 
 
         prevconfig = sys.modules.get(configname)
         prevconfig = sys.modules.get(configname)

+ 1 - 2
celery/tests/app/test_schedules.py

@@ -6,7 +6,6 @@ from contextlib import contextmanager
 from datetime import datetime, timedelta
 from datetime import datetime, timedelta
 from pickle import dumps, loads
 from pickle import dumps, loads
 
 
-from celery.five import items
 from celery.schedules import (
 from celery.schedules import (
     ParseException, crontab, crontab_parser, schedule, solar,
     ParseException, crontab, crontab_parser, schedule, solar,
 )
 )
@@ -610,7 +609,7 @@ class test_crontab_is_due(AppCase):
         l2, d2, n2 = due.remaining_delta(last_ran, ffwd=relativedelta)
         l2, d2, n2 = due.remaining_delta(last_ran, ffwd=relativedelta)
         if not isinstance(d1, relativedelta):
         if not isinstance(d1, relativedelta):
             self.assertEqual(l1, l2)
             self.assertEqual(l1, l2)
-            for field, value in items(d1._fields()):
+            for field, value in d1._fields().items():
                 self.assertEqual(getattr(d1, field), value)
                 self.assertEqual(getattr(d1, field), value)
             self.assertFalse(d2.years)
             self.assertFalse(d2.years)
             self.assertFalse(d2.months)
             self.assertFalse(d2.months)

+ 1 - 1
celery/tests/backends/test_amqp.py

@@ -5,13 +5,13 @@ import pickle
 from contextlib import contextmanager
 from contextlib import contextmanager
 from datetime import timedelta
 from datetime import timedelta
 from pickle import dumps, loads
 from pickle import dumps, loads
+from queue import Empty, Queue
 
 
 from billiard.einfo import ExceptionInfo
 from billiard.einfo import ExceptionInfo
 
 
 from celery import states
 from celery import states
 from celery import uuid
 from celery import uuid
 from celery.backends.amqp import AMQPBackend
 from celery.backends.amqp import AMQPBackend
-from celery.five import Empty, Queue, range
 from celery.result import AsyncResult
 from celery.result import AsyncResult
 
 
 from celery.tests.case import AppCase, Mock, depends_on_current_app, mock
 from celery.tests.case import AppCase, Mock, depends_on_current_app, mock

+ 4 - 20
celery/tests/backends/test_base.py

@@ -6,7 +6,6 @@ import types
 from contextlib import contextmanager
 from contextlib import contextmanager
 
 
 from celery.exceptions import ChordError, TimeoutError
 from celery.exceptions import ChordError, TimeoutError
-from celery.five import items, bytes_if_py2, range
 from celery.utils import serialization
 from celery.utils import serialization
 from celery.utils.serialization import subclass_exception
 from celery.utils.serialization import subclass_exception
 from celery.utils.serialization import find_pickleable_exception as fnpe
 from celery.utils.serialization import find_pickleable_exception as fnpe
@@ -32,19 +31,9 @@ class wrapobject:
     def __init__(self, *args, **kwargs):
     def __init__(self, *args, **kwargs):
         self.args = args
         self.args = args
 
 
-if sys.version_info[0] == 3 or getattr(sys, 'pypy_version_info', None):
-    Oldstyle = None
-else:
-    Oldstyle = types.ClassType(bytes_if_py2('Oldstyle'), (), {})
-Unpickleable = subclass_exception(
-    bytes_if_py2('Unpickleable'), KeyError, 'foo.module',
-)
-Impossible = subclass_exception(
-    bytes_if_py2('Impossible'), object, 'foo.module',
-)
-Lookalike = subclass_exception(
-    bytes_if_py2('Lookalike'), wrapobject, 'foo.module',
-)
+Unpickleable = subclass_exception('Unpickleable', KeyError, 'foo.module')
+Impossible = subclass_exception('Impossible', object, 'foo.module')
+Lookalike = subclass_exception('Lookalike', wrapobject, 'foo.module')
 
 
 
 
 class test_nulldict(Case):
 class test_nulldict(Case):
@@ -91,11 +80,6 @@ class test_BaseBackend_interface(AppCase):
 
 
 class test_exception_pickle(AppCase):
 class test_exception_pickle(AppCase):
 
 
-    @skip.if_python3(reason='does not support old style classes')
-    @skip.if_pypy()
-    def test_oldstyle(self):
-        self.assertTrue(fnpe(Oldstyle()))
-
     def test_BaseException(self):
     def test_BaseException(self):
         self.assertIsNone(fnpe(Exception()))
         self.assertIsNone(fnpe(Exception()))
 
 
@@ -355,7 +339,7 @@ class test_KeyValueStoreBackend(AppCase):
         for is_dict in True, False:
         for is_dict in True, False:
             self.b.mget_returns_dict = is_dict
             self.b.mget_returns_dict = is_dict
             ids = {uuid(): i for i in range(10)}
             ids = {uuid(): i for i in range(10)}
-            for id, i in items(ids):
+            for id, i in ids.items():
                 self.b.mark_as_done(id, i)
                 self.b.mark_as_done(id, i)
             it = self.b.get_many(list(ids))
             it = self.b.get_many(list(ids))
             for i, (got_id, got_state) in enumerate(it):
             for i, (got_id, got_state) in enumerate(it):

+ 6 - 7
celery/tests/backends/test_cache.py

@@ -11,7 +11,6 @@ from celery import states
 from celery import group, signature, uuid
 from celery import group, signature, uuid
 from celery.backends.cache import CacheBackend, DummyClient, backends
 from celery.backends.cache import CacheBackend, DummyClient, backends
 from celery.exceptions import ImproperlyConfigured
 from celery.exceptions import ImproperlyConfigured
-from celery.five import items, bytes_if_py2, string, text_t
 
 
 from celery.tests.case import AppCase, Mock, mock, patch, skip
 from celery.tests.case import AppCase, Mock, mock, patch, skip
 
 
@@ -153,7 +152,7 @@ class MemcachedClient(DummyClient):
         if PY3:
         if PY3:
             key_t, must_be, not_be, cod = bytes, 'string', 'bytes', 'decode'
             key_t, must_be, not_be, cod = bytes, 'string', 'bytes', 'decode'
         else:
         else:
-            key_t, must_be, not_be, cod = text_t, 'bytes', 'string', 'encode'
+            key_t, must_be, not_be, cod = str, 'bytes', 'string', 'encode'
         if isinstance(key, key_t):
         if isinstance(key, key_t):
             raise MyMemcachedStringEncodingError(
             raise MyMemcachedStringEncodingError(
                 'Keys must be {0}, not {1}.  Convert your '
                 'Keys must be {0}, not {1}.  Convert your '
@@ -166,7 +165,7 @@ class MockCacheMixin:
 
 
     @contextmanager
     @contextmanager
     def mock_memcache(self):
     def mock_memcache(self):
-        memcache = types.ModuleType(bytes_if_py2('memcache'))
+        memcache = types.ModuleType('memcache')
         memcache.Client = MemcachedClient
         memcache.Client = MemcachedClient
         memcache.Client.__module__ = memcache.__name__
         memcache.Client.__module__ = memcache.__name__
         prev, sys.modules['memcache'] = sys.modules.get('memcache'), memcache
         prev, sys.modules['memcache'] = sys.modules.get('memcache'), memcache
@@ -178,7 +177,7 @@ class MockCacheMixin:
 
 
     @contextmanager
     @contextmanager
     def mock_pylibmc(self):
     def mock_pylibmc(self):
-        pylibmc = types.ModuleType(bytes_if_py2('pylibmc'))
+        pylibmc = types.ModuleType('pylibmc')
         pylibmc.Client = MemcachedClient
         pylibmc.Client = MemcachedClient
         pylibmc.Client.__module__ = pylibmc.__name__
         pylibmc.Client.__module__ = pylibmc.__name__
         prev = sys.modules.get('pylibmc')
         prev = sys.modules.get('pylibmc')
@@ -229,7 +228,7 @@ class test_get_best_memcache(AppCase, MockCacheMixin):
     def test_backends(self):
     def test_backends(self):
         from celery.backends.cache import backends
         from celery.backends.cache import backends
         with self.mock_memcache():
         with self.mock_memcache():
-            for name, fun in items(backends):
+            for name, fun in backends.items():
                 self.assertTrue(fun())
                 self.assertTrue(fun())
 
 
 
 
@@ -241,7 +240,7 @@ class test_memcache_key(AppCase, MockCacheMixin):
                 with mock.mask_modules('pylibmc'):
                 with mock.mask_modules('pylibmc'):
                     from celery.backends import cache
                     from celery.backends import cache
                     cache._imp = [None]
                     cache._imp = [None]
-                    task_id, result = string(uuid()), 42
+                    task_id, result = str(uuid()), 42
                     b = cache.CacheBackend(backend='memcache', app=self.app)
                     b = cache.CacheBackend(backend='memcache', app=self.app)
                     b.store_result(task_id, result, state=states.SUCCESS)
                     b.store_result(task_id, result, state=states.SUCCESS)
                     self.assertEqual(b.get_result(task_id), result)
                     self.assertEqual(b.get_result(task_id), result)
@@ -262,7 +261,7 @@ class test_memcache_key(AppCase, MockCacheMixin):
             with self.mock_pylibmc():
             with self.mock_pylibmc():
                 from celery.backends import cache
                 from celery.backends import cache
                 cache._imp = [None]
                 cache._imp = [None]
-                task_id, result = string(uuid()), 42
+                task_id, result = str(uuid()), 42
                 b = cache.CacheBackend(backend='memcache', app=self.app)
                 b = cache.CacheBackend(backend='memcache', app=self.app)
                 b.store_result(task_id, result, state=states.SUCCESS)
                 b.store_result(task_id, result, state=states.SUCCESS)
                 self.assertEqual(b.get_result(task_id), result)
                 self.assertEqual(b.get_result(task_id), result)

+ 1 - 2
celery/tests/bin/test_base.py

@@ -8,7 +8,6 @@ from celery.bin.base import (
     Extensions,
     Extensions,
     HelpFormatter,
     HelpFormatter,
 )
 )
-from celery.five import bytes_if_py2
 from celery.utils.objects import Bunch
 from celery.utils.objects import Bunch
 
 
 from celery.tests.case import (
 from celery.tests.case import (
@@ -353,7 +352,7 @@ class test_Command(AppCase):
         cmd = MockCommand(app=self.app)
         cmd = MockCommand(app=self.app)
         with patch('celery.bin.base.symbol_by_name') as sbn:
         with patch('celery.bin.base.symbol_by_name') as sbn:
             from types import ModuleType
             from types import ModuleType
-            x = ModuleType(bytes_if_py2('proj'))
+            x = ModuleType('proj')
 
 
             def on_sbn(*args, **kwargs):
             def on_sbn(*args, **kwargs):
 
 

+ 0 - 1
celery/tests/concurrency/test_prefork.py

@@ -7,7 +7,6 @@ import socket
 from itertools import cycle
 from itertools import cycle
 
 
 from celery.app.defaults import DEFAULTS
 from celery.app.defaults import DEFAULTS
-from celery.five import range
 from celery.utils.collections import AttributeDict
 from celery.utils.collections import AttributeDict
 from celery.utils.functional import noop
 from celery.utils.functional import noop
 from celery.utils.objects import Bunch
 from celery.utils.objects import Bunch

+ 0 - 1
celery/tests/events/test_state.py

@@ -18,7 +18,6 @@ from celery.events.state import (
     Task,
     Task,
     heartbeat_expires,
     heartbeat_expires,
 )
 )
-from celery.five import range
 from celery.tests.case import AppCase, Mock, patch, skip
 from celery.tests.case import AppCase, Mock, patch, skip
 
 
 try:
 try:

+ 2 - 1
celery/tests/security/test_security.py

@@ -14,10 +14,11 @@ Generated with:
 """
 """
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 
 
+import builtins
+
 from kombu.serialization import disable_insecure_serializers
 from kombu.serialization import disable_insecure_serializers
 
 
 from celery.exceptions import ImproperlyConfigured, SecurityError
 from celery.exceptions import ImproperlyConfigured, SecurityError
-from celery.five import builtins
 from celery.security import disable_untrusted_serializers, setup_security
 from celery.security import disable_untrusted_serializers, setup_security
 from celery.security.utils import reraise_errors
 from celery.security.utils import reraise_errors
 from kombu.serialization import registry
 from kombu.serialization import registry

+ 0 - 1
celery/tests/tasks/test_chord.py

@@ -6,7 +6,6 @@ from celery import group, uuid
 from celery import canvas
 from celery import canvas
 from celery import result
 from celery import result
 from celery.exceptions import ChordError, Retry
 from celery.exceptions import ChordError, Retry
-from celery.five import range
 from celery.result import AsyncResult, GroupResult, EagerResult
 from celery.result import AsyncResult, GroupResult, EagerResult
 from celery.tests.case import AppCase, Mock
 from celery.tests.case import AppCase, Mock
 
 

+ 0 - 1
celery/tests/tasks/test_result.py

@@ -9,7 +9,6 @@ from celery.backends.base import SyncBackendMixin
 from celery.exceptions import (
 from celery.exceptions import (
     ImproperlyConfigured, IncompleteStream, TimeoutError,
     ImproperlyConfigured, IncompleteStream, TimeoutError,
 )
 )
-from celery.five import range
 from celery.result import (
 from celery.result import (
     AsyncResult,
     AsyncResult,
     EagerResult,
     EagerResult,

+ 3 - 4
celery/tests/tasks/test_tasks.py

@@ -9,7 +9,6 @@ from celery import Task
 from celery import group, uuid
 from celery import group, uuid
 from celery.app.task import _reprtask
 from celery.app.task import _reprtask
 from celery.exceptions import Ignore, Retry
 from celery.exceptions import Ignore, Retry
-from celery.five import items, range, string_t
 from celery.result import EagerResult
 from celery.result import EagerResult
 from celery.utils.timeutils import parse_iso8601
 from celery.utils.timeutils import parse_iso8601
 
 
@@ -307,14 +306,14 @@ class test_tasks(TasksCase):
         self.assertEqual(task_data['task'], task_name)
         self.assertEqual(task_data['task'], task_name)
         task_kwargs = task_data.get('kwargs', {})
         task_kwargs = task_data.get('kwargs', {})
         if test_eta:
         if test_eta:
-            self.assertIsInstance(task_data.get('eta'), string_t)
+            self.assertIsInstance(task_data.get('eta'), str)
             to_datetime = parse_iso8601(task_data.get('eta'))
             to_datetime = parse_iso8601(task_data.get('eta'))
             self.assertIsInstance(to_datetime, datetime)
             self.assertIsInstance(to_datetime, datetime)
         if test_expires:
         if test_expires:
-            self.assertIsInstance(task_data.get('expires'), string_t)
+            self.assertIsInstance(task_data.get('expires'), str)
             to_datetime = parse_iso8601(task_data.get('expires'))
             to_datetime = parse_iso8601(task_data.get('expires'))
             self.assertIsInstance(to_datetime, datetime)
             self.assertIsInstance(to_datetime, datetime)
-        for arg_name, arg_value in items(kwargs):
+        for arg_name, arg_value in kwargs.items():
             self.assertEqual(task_kwargs.get(arg_name), arg_value)
             self.assertEqual(task_kwargs.get(arg_name), arg_value)
 
 
     def test_incomplete_task_cls(self):
     def test_incomplete_task_cls(self):

+ 1 - 2
celery/tests/utils/test_collections.py

@@ -16,7 +16,6 @@ from celery.utils.collections import (
     LimitedSet,
     LimitedSet,
     Messagebuffer,
     Messagebuffer,
 )
 )
-from celery.five import items
 from celery.utils.objects import Bunch
 from celery.utils.objects import Bunch
 
 
 from celery.tests.case import Case, skip
 from celery.tests.case import Case, skip
@@ -101,7 +100,7 @@ class test_ConfigurationView(Case):
         expected = {'changed_key': 1,
         expected = {'changed_key': 1,
                     'default_key': 1,
                     'default_key': 1,
                     'both': 2}
                     'both': 2}
-        self.assertDictEqual(dict(items(self.view)), expected)
+        self.assertDictEqual(dict(self.view.items()), expected)
         self.assertItemsEqual(list(iter(self.view)),
         self.assertItemsEqual(list(iter(self.view)),
                               list(expected.keys()))
                               list(expected.keys()))
         self.assertItemsEqual(list(self.view.keys()), list(expected.keys()))
         self.assertItemsEqual(list(self.view.keys()), list(expected.keys()))

+ 1 - 2
celery/tests/utils/test_functional.py

@@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals
 
 
 from kombu.utils.functional import lazy
 from kombu.utils.functional import lazy
 
 
-from celery.five import range, nextfun
 from celery.utils.functional import (
 from celery.utils.functional import (
     DummyContext,
     DummyContext,
     fun_takes_argument,
     fun_takes_argument,
@@ -89,7 +88,7 @@ class test_mlazy(Case):
     def test_is_memoized(self):
     def test_is_memoized(self):
 
 
         it = iter(range(20, 30))
         it = iter(range(20, 30))
-        p = mlazy(nextfun(it))
+        p = mlazy(next(it))
         self.assertEqual(p(), 20)
         self.assertEqual(p(), 20)
         self.assertTrue(p.evaluated)
         self.assertTrue(p.evaluated)
         self.assertEqual(p(), 20)
         self.assertEqual(p(), 20)

+ 2 - 2
celery/tests/utils/test_graph.py

@@ -1,6 +1,6 @@
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 
 
-from celery.five import WhateverIO, items
+from celery.five import WhateverIO
 from celery.utils.graph import DependencyGraph
 from celery.utils.graph import DependencyGraph
 
 
 from celery.tests.case import Case, Mock
 from celery.tests.case import Case, Mock
@@ -53,7 +53,7 @@ class test_DependencyGraph(Case):
 
 
     def test_items(self):
     def test_items(self):
         self.assertDictEqual(
         self.assertDictEqual(
-            dict(items(self.graph1())),
+            dict(self.graph1().items()),
             {'A': [], 'B': [], 'C': ['A'], 'D': ['C', 'B']},
             {'A': [], 'B': [], 'C': ['A'], 'D': ['C', 'B']},
         )
         )
 
 

+ 1 - 3
celery/tests/utils/test_imports.py

@@ -1,7 +1,5 @@
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 
 
-from celery.five import bytes_if_py2
-
 from celery.utils.imports import (
 from celery.utils.imports import (
     NotAPackage,
     NotAPackage,
     qualname,
     qualname,
@@ -25,7 +23,7 @@ class test_import_utils(Case):
         self.assertTrue(find_module('celery.worker.request'))
         self.assertTrue(find_module('celery.worker.request'))
 
 
     def test_qualname(self):
     def test_qualname(self):
-        Class = type(bytes_if_py2('Fox'), (object,), {
+        Class = type('Fox', (object,), {
             '__module__': 'quick.brown',
             '__module__': 'quick.brown',
         })
         })
         self.assertEqual(qualname(Class), 'quick.brown.Fox')
         self.assertEqual(qualname(Class), 'quick.brown.Fox')

+ 2 - 5
celery/tests/utils/test_local.py

@@ -2,7 +2,6 @@ from __future__ import absolute_import, unicode_literals
 
 
 import sys
 import sys
 
 
-from celery.five import string, long_t
 from celery.local import (
 from celery.local import (
     Proxy,
     Proxy,
     PromiseProxy,
     PromiseProxy,
@@ -94,10 +93,10 @@ class test_Proxy(Case):
                 return 'REPR'
                 return 'REPR'
 
 
         x = Proxy(lambda: X())
         x = Proxy(lambda: X())
-        self.assertEqual(string(x), 'UNICODE')
+        self.assertEqual(str(x), 'UNICODE')
         del(X.__unicode__)
         del(X.__unicode__)
         del(X.__str__)
         del(X.__str__)
-        self.assertEqual(string(x), 'REPR')
+        self.assertEqual(str(x), 'REPR')
 
 
     def test_dir(self):
     def test_dir(self):
 
 
@@ -267,8 +266,6 @@ class test_Proxy(Case):
         x = Proxy(lambda: 10)
         x = Proxy(lambda: 10)
         self.assertEqual(type(x.__float__()), float)
         self.assertEqual(type(x.__float__()), float)
         self.assertEqual(type(x.__int__()), int)
         self.assertEqual(type(x.__int__()), int)
-        if not PY3:
-            self.assertEqual(type(x.__long__()), long_t)
         self.assertTrue(hex(x))
         self.assertTrue(hex(x))
         self.assertTrue(oct(x))
         self.assertTrue(oct(x))
 
 

+ 0 - 1
celery/tests/utils/test_saferef.py

@@ -1,6 +1,5 @@
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 
 
-from celery.five import range
 from celery.utils.dispatch.saferef import safe_ref
 from celery.utils.dispatch.saferef import safe_ref
 from celery.tests.case import Case
 from celery.tests.case import Case
 
 

+ 4 - 7
celery/tests/utils/test_saferepr.py

@@ -5,8 +5,6 @@ import re
 from decimal import Decimal
 from decimal import Decimal
 from pprint import pprint
 from pprint import pprint
 
 
-from celery.five import items, long_t, text_t, values
-
 from celery.utils.saferepr import saferepr
 from celery.utils.saferepr import saferepr
 
 
 from celery.tests.case import Case
 from celery.tests.case import Case
@@ -15,10 +13,9 @@ D_NUMBERS = {
     b'integer': 1,
     b'integer': 1,
     b'float': 1.3,
     b'float': 1.3,
     b'decimal': Decimal('1.3'),
     b'decimal': Decimal('1.3'),
-    b'long': long_t(4),
     b'complex': complex(13.3),
     b'complex': complex(13.3),
 }
 }
-D_INT_KEYS = {v: k for k, v in items(D_NUMBERS)}
+D_INT_KEYS = {v: k for k, v in D_NUMBERS.items()}
 
 
 QUICK_BROWN_FOX = 'The quick brown fox jumps over the lazy dog.'
 QUICK_BROWN_FOX = 'The quick brown fox jumps over the lazy dog.'
 B_QUICK_BROWN_FOX = b'The quick brown fox jumps over the lazy dog.'
 B_QUICK_BROWN_FOX = b'The quick brown fox jumps over the lazy dog.'
@@ -30,7 +27,7 @@ D_TEXT = {
     b'xuzzy': B_QUICK_BROWN_FOX,
     b'xuzzy': B_QUICK_BROWN_FOX,
 }
 }
 
 
-L_NUMBERS = list(values(D_NUMBERS))
+L_NUMBERS = list(D_NUMBERS.values())
 
 
 D_TEXT_LARGE = {
 D_TEXT_LARGE = {
     b'bazxuzzyfoobarlongverylonglong': QUICK_BROWN_FOX * 30,
     b'bazxuzzyfoobarlongverylonglong': QUICK_BROWN_FOX * 30,
@@ -55,7 +52,7 @@ RE_LONG_SUFFIX = re.compile(r'(\d)+L')
 
 
 
 
 def old_repr(s):
 def old_repr(s):
-    return text_t(RE_LONG_SUFFIX.sub(
+    return str(RE_LONG_SUFFIX.sub(
         r'\1',
         r'\1',
         RE_EMPTY_SET_REPR.sub(
         RE_EMPTY_SET_REPR.sub(
             RE_EMPTY_SET_REPR_REPLACE,
             RE_EMPTY_SET_REPR_REPLACE,
@@ -122,7 +119,7 @@ class dict3(dict):
 class test_saferepr(Case):
 class test_saferepr(Case):
 
 
     def test_safe_types(self):
     def test_safe_types(self):
-        for value in values(D_NUMBERS):
+        for value in D_NUMBERS.values():
             self.assertEqual(saferepr(value), old_repr(value))
             self.assertEqual(saferepr(value), old_repr(value))
 
 
     def test_numbers_dict(self):
     def test_numbers_dict(self):

+ 1 - 2
celery/tests/utils/test_term.py

@@ -5,7 +5,6 @@ import sys
 
 
 from celery.utils import term
 from celery.utils import term
 from celery.utils.term import colored, fg
 from celery.utils.term import colored, fg
-from celery.five import text_t
 
 
 from celery.tests.case import Case, skip
 from celery.tests.case import Case, skip
 
 
@@ -53,7 +52,7 @@ class test_colored(Case):
         self.assertTrue(str(colored().iwhite('f')))
         self.assertTrue(str(colored().iwhite('f')))
         self.assertTrue(str(colored().reset('f')))
         self.assertTrue(str(colored().reset('f')))
 
 
-        self.assertTrue(text_t(colored().green('∂bar')))
+        self.assertTrue(str(colored().green('∂bar')))
 
 
         self.assertTrue(
         self.assertTrue(
             colored().red('éefoo') + colored().green('∂bar'))
             colored().red('éefoo') + colored().green('∂bar'))

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

@@ -5,11 +5,11 @@ import socket
 
 
 from collections import defaultdict
 from collections import defaultdict
 from datetime import datetime, timedelta
 from datetime import datetime, timedelta
+from queue import Queue as FastQueue
 
 
 from kombu import pidbox
 from kombu import pidbox
 from kombu.utils import uuid
 from kombu.utils import uuid
 
 
-from celery.five import Queue as FastQueue
 from celery.utils.timer2 import Timer
 from celery.utils.timer2 import Timer
 from celery.worker import WorkController as _WC
 from celery.worker import WorkController as _WC
 from celery.worker import consumer
 from celery.worker import consumer

+ 2 - 1
celery/tests/worker/test_loops.py

@@ -3,13 +3,14 @@ from __future__ import absolute_import, unicode_literals
 import errno
 import errno
 import socket
 import socket
 
 
+from queue import Empty
+
 from kombu.async import Hub, READ, WRITE, ERR
 from kombu.async import Hub, READ, WRITE, ERR
 
 
 from celery.bootsteps import CLOSE, RUN
 from celery.bootsteps import CLOSE, RUN
 from celery.exceptions import (
 from celery.exceptions import (
     InvalidTaskError, WorkerLostError, WorkerShutdown, WorkerTerminate,
     InvalidTaskError, WorkerLostError, WorkerShutdown, WorkerTerminate,
 )
 )
-from celery.five import Empty
 from celery.platforms import EX_FAILURE
 from celery.platforms import EX_FAILURE
 from celery.worker import state
 from celery.worker import state
 from celery.worker.consumer import Consumer
 from celery.worker.consumer import Consumer

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

@@ -8,6 +8,7 @@ import socket
 import sys
 import sys
 
 
 from datetime import datetime, timedelta
 from datetime import datetime, timedelta
+from time import monotonic
 
 
 from billiard.einfo import ExceptionInfo
 from billiard.einfo import ExceptionInfo
 from kombu.utils import uuid
 from kombu.utils import uuid
@@ -33,7 +34,6 @@ from celery.exceptions import (
     Terminated,
     Terminated,
     WorkerLostError,
     WorkerLostError,
 )
 )
-from celery.five import monotonic
 from celery.signals import task_revoked
 from celery.signals import task_revoked
 from celery.worker import request as module
 from celery.worker import request as module
 from celery.worker.request import (
 from celery.worker.request import (

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

@@ -8,6 +8,7 @@ from collections import deque
 from datetime import datetime, timedelta
 from datetime import datetime, timedelta
 from functools import partial
 from functools import partial
 from threading import Event
 from threading import Event
+from queue import Empty, Queue as FastQueue
 
 
 from amqp import ChannelError
 from amqp import ChannelError
 from kombu import Connection
 from kombu import Connection
@@ -22,7 +23,6 @@ from celery.exceptions import (
     WorkerShutdown, WorkerTerminate, TaskRevokedError,
     WorkerShutdown, WorkerTerminate, TaskRevokedError,
     InvalidTaskError, ImproperlyConfigured,
     InvalidTaskError, ImproperlyConfigured,
 )
 )
-from celery.five import Empty, range, Queue as FastQueue
 from celery.platforms import EX_FAILURE
 from celery.platforms import EX_FAILURE
 from celery import worker as worker_module
 from celery import worker as worker_module
 from celery.worker import components
 from celery.worker import components

+ 1 - 4
celery/utils/abstract.py

@@ -5,8 +5,6 @@ from __future__ import absolute_import, unicode_literals
 from abc import ABCMeta, abstractmethod, abstractproperty
 from abc import ABCMeta, abstractmethod, abstractproperty
 from collections import Callable
 from collections import Callable
 
 
-from celery.five import with_metaclass
-
 __all__ = ['CallableTask', 'CallableSignature']
 __all__ = ['CallableTask', 'CallableSignature']
 
 
 
 
@@ -14,8 +12,7 @@ def _hasattr(C, attr):
     return any(attr in B.__dict__ for B in C.__mro__)
     return any(attr in B.__dict__ for B in C.__mro__)
 
 
 
 
-@with_metaclass(ABCMeta)
-class _AbstractClass:
+class _AbstractClass(metaclass=ABCMeta)
     __required_attributes__ = frozenset()
     __required_attributes__ = frozenset()
 
 
     @classmethod
     @classmethod

+ 18 - 55
celery/utils/collections.py

@@ -11,8 +11,7 @@ from collections import (
 )
 )
 from heapq import heapify, heappush, heappop
 from heapq import heapify, heappush, heappop
 from itertools import chain, count
 from itertools import chain, count
-
-from celery.five import Empty, items, keys, values
+from queue import Empty
 
 
 from .functional import first, uniq
 from .functional import first, uniq
 from .text import match_case
 from .text import match_case
@@ -56,7 +55,7 @@ def lpmerge(L, R):
     Keeps values from `L`, if the value in `R` is :const:`None`.
     Keeps values from `L`, if the value in `R` is :const:`None`.
     """
     """
     setitem = L.__setitem__
     setitem = L.__setitem__
-    [setitem(k, v) for k, v in items(R) if v is not None]
+    [setitem(k, v) for k, v in R.items() if v is not None]
     return L
     return L
 
 
 
 
@@ -66,7 +65,7 @@ class OrderedDict(_OrderedDict):
         def _LRUkey(self):
         def _LRUkey(self):
             # return value of od.keys does not support __next__,
             # return value of od.keys does not support __next__,
             # but this version will also not create a copy of the list.
             # but this version will also not create a copy of the list.
-            return next(iter(keys(self)))
+            return next(iter(self.keys()))
     else:
     else:
         if _dict_is_ordered:  # pragma: no cover
         if _dict_is_ordered:  # pragma: no cover
             def _LRUkey(self):
             def _LRUkey(self):
@@ -172,37 +171,19 @@ class DictAttribute:
     def __contains__(self, key):
     def __contains__(self, key):
         return hasattr(self.obj, key)
         return hasattr(self.obj, key)
 
 
-    def _iterate_keys(self):
+    def keys(self):
         return iter(dir(self.obj))
         return iter(dir(self.obj))
-    iterkeys = _iterate_keys
 
 
     def __iter__(self):
     def __iter__(self):
-        return self._iterate_keys()
+        return self.keys()
 
 
-    def _iterate_items(self):
-        for key in self._iterate_keys():
+    def items(self):
+        for key in self.keys():
             yield key, getattr(self.obj, key)
             yield key, getattr(self.obj, key)
-    iteritems = _iterate_items
 
 
-    def _iterate_values(self):
-        for key in self._iterate_keys():
+    def values(self):
+        for key in self.keys():
             yield getattr(self.obj, key)
             yield getattr(self.obj, key)
-    itervalues = _iterate_values
-
-    if sys.version_info[0] == 3:  # pragma: no cover
-        items = _iterate_items
-        keys = _iterate_keys
-        values = _iterate_values
-    else:
-
-        def keys(self):
-            return list(self)
-
-        def items(self):
-            return list(self._iterate_items())
-
-        def values(self):
-            return list(self._iterate_values())
 MutableMapping.register(DictAttribute)
 MutableMapping.register(DictAttribute)
 
 
 
 
@@ -271,7 +252,7 @@ class ChainMap(MutableMapping):
         return len(set().union(*self.maps))
         return len(set().union(*self.maps))
 
 
     def __iter__(self):
     def __iter__(self):
-        return self._iterate_keys()
+        return self.keys()
 
 
     def __contains__(self, key):
     def __contains__(self, key):
         key = self._key(key)
         key = self._key(key)
@@ -309,32 +290,14 @@ class ChainMap(MutableMapping):
         # changes take precedence.
         # changes take precedence.
         return chain(*[op(d) for d in reversed(self.maps)])
         return chain(*[op(d) for d in reversed(self.maps)])
 
 
-    def _iterate_keys(self):
+    def keys(self):
         return uniq(self._iter(lambda d: d.keys()))
         return uniq(self._iter(lambda d: d.keys()))
-    iterkeys = _iterate_keys
 
 
-    def _iterate_items(self):
+    def items(self):
         return ((key, self[key]) for key in self)
         return ((key, self[key]) for key in self)
-    iteritems = _iterate_items
 
 
-    def _iterate_values(self):
+    def values(self):
         return (self[key] for key in self)
         return (self[key] for key in self)
-    itervalues = _iterate_values
-
-    if sys.version_info[0] == 3:  # pragma: no cover
-        keys = _iterate_keys
-        items = _iterate_items
-        values = _iterate_values
-
-    else:  # noqa
-        def keys(self):
-            return list(self._iterate_keys())
-
-        def items(self):
-            return list(self._iterate_items())
-
-        def values(self):
-            return list(self._iterate_values())
 
 
 
 
 class ConfigurationView(ChainMap, AttributeDictMixin):
 class ConfigurationView(ChainMap, AttributeDictMixin):
@@ -494,7 +457,7 @@ class LimitedSet:
 
 
     def _refresh_heap(self):
     def _refresh_heap(self):
         """Time consuming recreating of heap. Do not run this too often."""
         """Time consuming recreating of heap. Do not run this too often."""
-        self._heap[:] = [entry for entry in values(self._data)]
+        self._heap[:] = [entry for entry in self._data.values()]
         heapify(self._heap)
         heapify(self._heap)
 
 
     def _maybe_refresh_heap(self):
     def _maybe_refresh_heap(self):
@@ -527,7 +490,7 @@ class LimitedSet:
             self.purge()
             self.purge()
         elif isinstance(other, dict):
         elif isinstance(other, dict):
             # revokes are sent as a dict
             # revokes are sent as a dict
-            for key, inserted in items(other):
+            for key, inserted in other.items():
                 if isinstance(inserted, (tuple, list)):
                 if isinstance(inserted, (tuple, list)):
                     # in case someone uses ._data directly for sending update
                     # in case someone uses ._data directly for sending update
                     inserted = inserted[0]
                     inserted = inserted[0]
@@ -594,7 +557,7 @@ class LimitedSet:
             >>> r == s
             >>> r == s
             True
             True
         """
         """
-        return {key: inserted for inserted, key in values(self._data)}
+        return {key: inserted for inserted, key in self._data.values()}
 
 
     def __eq__(self, other):
     def __eq__(self, other):
         return self._data == other._data
         return self._data == other._data
@@ -608,7 +571,7 @@ class LimitedSet:
         )
         )
 
 
     def __iter__(self):
     def __iter__(self):
-        return (i for _, i in sorted(values(self._data)))
+        return (i for _, i in sorted(self._data.values()))
 
 
     def __len__(self):
     def __len__(self):
         return len(self._data)
         return len(self._data)
@@ -730,7 +693,7 @@ class BufferMap(OrderedDict, Evictable):
         self.bufmaxsize = 1000
         self.bufmaxsize = 1000
         if iterable:
         if iterable:
             self.update(iterable)
             self.update(iterable)
-        self.total = sum(len(buf) for buf in items(self))
+        self.total = sum(len(buf) for buf in self.items())
 
 
     def put(self, key, item):
     def put(self, key, item):
         self._get_or_create_buffer(key).put(item)
         self._get_or_create_buffer(key).put(item)

+ 2 - 2
celery/utils/debug.py

@@ -10,7 +10,7 @@ from contextlib import contextmanager
 from functools import partial
 from functools import partial
 from pprint import pprint
 from pprint import pprint
 
 
-from celery.five import WhateverIO, items, range
+from celery.five import WhateverIO
 from celery.platforms import signals
 from celery.platforms import signals
 
 
 try:
 try:
@@ -175,7 +175,7 @@ def cry(out=None, sepchr='=', seplen=49):  # pragma: no cover
     tmap = {t.ident: t for t in threading.enumerate()}
     tmap = {t.ident: t for t in threading.enumerate()}
 
 
     sep = sepchr * seplen
     sep = sepchr * seplen
-    for tid, frame in items(sys._current_frames()):
+    for tid, frame in sys._current_frames().items():
         thread = tmap.get(tid)
         thread = tmap.get(tid)
         if not thread:
         if not thread:
             # skip old junk (left-overs from a fork)
             # skip old junk (left-overs from a fork)

+ 1 - 2
celery/utils/dispatch/signal.py

@@ -4,7 +4,6 @@ from __future__ import absolute_import, unicode_literals
 
 
 import weakref
 import weakref
 
 
-from celery.five import range, text_t
 from celery.local import PromiseProxy, Proxy
 from celery.local import PromiseProxy, Proxy
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 
 
@@ -20,7 +19,7 @@ WEAKREF_TYPES = (weakref.ReferenceType, saferef.BoundMethodWeakref)
 def _make_id(target):  # pragma: no cover
 def _make_id(target):  # pragma: no cover
     if isinstance(target, Proxy):
     if isinstance(target, Proxy):
         target = target._get_current_object()
         target = target._get_current_object()
-    if isinstance(target, (bytes, text_t)):
+    if isinstance(target, (bytes, str)):
         # see Issue #2475
         # see Issue #2475
         return target
         return target
     if hasattr(target, '__func__'):
     if hasattr(target, '__func__'):

+ 2 - 3
celery/utils/functional.py

@@ -4,8 +4,9 @@ from __future__ import absolute_import, print_function, unicode_literals
 
 
 import sys
 import sys
 
 
+from collections import UserList
 from functools import partial
 from functools import partial
-from inspect import isfunction
+from inspect import getfullargspec, isfunction
 from itertools import chain, islice
 from itertools import chain, islice
 
 
 from kombu.utils.functional import (
 from kombu.utils.functional import (
@@ -14,8 +15,6 @@ from kombu.utils.functional import (
 )
 )
 from vine import promise
 from vine import promise
 
 
-from celery.five import UserList, getfullargspec, range
-
 __all__ = [
 __all__ = [
     'LRUCache', 'is_list', 'maybe_list', 'memoize', 'mlazy', 'noop',
     'LRUCache', 'is_list', 'maybe_list', 'memoize', 'mlazy', 'noop',
     'first', 'firstmethod', 'chunks', 'padlist', 'mattrgetter', 'uniq',
     'first', 'firstmethod', 'chunks', 'padlist', 'mattrgetter', 'uniq',

+ 5 - 8
celery/utils/graph.py

@@ -7,8 +7,6 @@ from textwrap import dedent
 
 
 from kombu.utils.encoding import safe_str, bytes_to_str
 from kombu.utils.encoding import safe_str, bytes_to_str
 
 
-from celery.five import items
-
 __all__ = ['DOT', 'CycleError', 'DependencyGraph', 'GraphFormatter']
 __all__ = ['DOT', 'CycleError', 'DependencyGraph', 'GraphFormatter']
 
 
 
 
@@ -105,7 +103,7 @@ class DependencyGraph:
 
 
     def edges(self):
     def edges(self):
         """Return generator that yields for all edges in the graph."""
         """Return generator that yields for all edges in the graph."""
-        return (obj for obj, adj in items(self) if adj)
+        return (obj for obj, adj in self.items() if adj)
 
 
     def _khan62(self):
     def _khan62(self):
         """Khans simple topological sort algorithm from '62
         """Khans simple topological sort algorithm from '62
@@ -183,7 +181,7 @@ class DependencyGraph:
                 seen.add(draw.label(obj))
                 seen.add(draw.label(obj))
 
 
         P(draw.head())
         P(draw.head())
-        for obj, adjacent in items(self):
+        for obj, adjacent in self.items():
             if not adjacent:
             if not adjacent:
                 if_not_seen(draw.terminal_node, obj)
                 if_not_seen(draw.terminal_node, obj)
             for req in adjacent:
             for req in adjacent:
@@ -206,9 +204,8 @@ class DependencyGraph:
     def __contains__(self, obj):
     def __contains__(self, obj):
         return obj in self.adjacent
         return obj in self.adjacent
 
 
-    def _iterate_items(self):
-        return items(self.adjacent)
-    items = iteritems = _iterate_items
+    def items(self):
+        return self.adjacent.items()
 
 
     def __repr__(self):
     def __repr__(self):
         return '\n'.join(self.repr_node(N) for N in self)
         return '\n'.join(self.repr_node(N) for N in self)
@@ -265,7 +262,7 @@ class GraphFormatter:
     def attrs(self, d, scheme=None):
     def attrs(self, d, scheme=None):
         d = dict(self.scheme, **dict(scheme, **d or {}) if scheme else d)
         d = dict(self.scheme, **dict(scheme, **d or {}) if scheme else d)
         return self._attrsep.join(
         return self._attrsep.join(
-            safe_str(self.attr(k, v)) for k, v in items(d)
+            safe_str(self.attr(k, v)) for k, v in d.items()
         )
         )
 
 
     def head(self, **attrs):
     def head(self, **attrs):

+ 1 - 2
celery/utils/imports.py

@@ -8,11 +8,10 @@ import os
 import sys
 import sys
 
 
 from contextlib import contextmanager
 from contextlib import contextmanager
+from imp import reload
 
 
 from kombu.utils import symbol_by_name
 from kombu.utils import symbol_by_name
 
 
-from celery.five import reload
-
 #: Billiard sets this when execv is enabled.
 #: Billiard sets this when execv is enabled.
 #: We use it to find out the name of the original ``__main__``
 #: We use it to find out the name of the original ``__main__``
 #: module, so that we can properly rewrite the name of the
 #: module, so that we can properly rewrite the name of the

+ 3 - 6
celery/utils/log.py

@@ -10,12 +10,9 @@ import threading
 import traceback
 import traceback
 
 
 from contextlib import contextmanager
 from contextlib import contextmanager
-from kombu.five import values
 from kombu.log import get_logger as _get_logger, LOG_LEVELS
 from kombu.log import get_logger as _get_logger, LOG_LEVELS
 from kombu.utils.encoding import safe_str
 from kombu.utils.encoding import safe_str
 
 
-from celery.five import string_t, text_t
-
 from .term import colored
 from .term import colored
 
 
 __all__ = [
 __all__ = [
@@ -46,7 +43,7 @@ def set_in_sighandler(value):
 
 
 def iter_open_logger_fds():
 def iter_open_logger_fds():
     seen = set()
     seen = set()
-    loggers = (list(values(logging.Logger.manager.loggerDict)) +
+    loggers = (list(logging.Logger.manager.loggerDict.values()) +
                [logging.getLogger(None)])
                [logging.getLogger(None)])
     for logger in loggers:
     for logger in loggers:
         try:
         try:
@@ -148,8 +145,8 @@ class ColorFormatter(logging.Formatter):
                 # so need to reorder calls based on type.
                 # so need to reorder calls based on type.
                 # Issue #427
                 # Issue #427
                 try:
                 try:
-                    if isinstance(msg, string_t):
-                        return text_t(color(safe_str(msg)))
+                    if isinstance(msg, str):
+                        return str(color(safe_str(msg)))
                     return safe_str(color(msg))
                     return safe_str(color(msg))
                 except UnicodeDecodeError:  # pragma: no cover
                 except UnicodeDecodeError:  # pragma: no cover
                     return safe_str(msg)  # skip colors
                     return safe_str(msg)  # skip colors

+ 3 - 5
celery/utils/saferepr.py

@@ -24,8 +24,6 @@ from pprint import _recursion
 
 
 from kombu.utils.encoding import bytes_to_str
 from kombu.utils.encoding import bytes_to_str
 
 
-from celery.five import items, text_t
-
 from .text import truncate, truncate_bytes
 from .text import truncate, truncate_bytes
 
 
 __all__ = ['saferepr', 'reprstream']
 __all__ = ['saferepr', 'reprstream']
@@ -43,7 +41,7 @@ _key = namedtuple('_key', ('value',))
 _quoted = namedtuple('_quoted', ('value',))
 _quoted = namedtuple('_quoted', ('value',))
 _dirty = namedtuple('_dirty', ('objid',))
 _dirty = namedtuple('_dirty', ('objid',))
 
 
-chars_t = (bytes, text_t)
+chars_t = (bytes, str)
 safe_t = (Number,)
 safe_t = (Number,)
 set_t = (frozenset, set)
 set_t = (frozenset, set)
 
 
@@ -70,7 +68,7 @@ def _chaindict(mapping,
                LIT_DICT_KVSEP=LIT_DICT_KVSEP,
                LIT_DICT_KVSEP=LIT_DICT_KVSEP,
                LIT_LIST_SEP=LIT_LIST_SEP):
                LIT_LIST_SEP=LIT_LIST_SEP):
     size = len(mapping)
     size = len(mapping)
-    for i, (k, v) in enumerate(items(mapping)):
+    for i, (k, v) in enumerate(mapping.items()):
         yield _key(k)
         yield _key(k)
         yield LIT_DICT_KVSEP
         yield LIT_DICT_KVSEP
         yield v
         yield v
@@ -155,7 +153,7 @@ def reprstream(stack, seen=None, maxlevels=3, level=0, isinstance=isinstance):
             elif isinstance(val, Decimal):
             elif isinstance(val, Decimal):
                 yield repr(val), it
                 yield repr(val), it
             elif isinstance(val, safe_t):
             elif isinstance(val, safe_t):
-                yield text_t(val), it
+                yield str(val), it
             elif isinstance(val, chars_t):
             elif isinstance(val, chars_t):
                 yield _quoted(val), it
                 yield _quoted(val), it
             elif isinstance(val, range_t):  # pragma: no cover
             elif isinstance(val, range_t):  # pragma: no cover

+ 5 - 7
celery/utils/serialization.py

@@ -13,8 +13,6 @@ from itertools import takewhile
 
 
 from kombu.utils.encoding import bytes_to_str, str_to_bytes
 from kombu.utils.encoding import bytes_to_str, str_to_bytes
 
 
-from celery.five import bytes_if_py2, items, reraise, string_t
-
 from .encoding import safe_repr
 from .encoding import safe_repr
 
 
 try:
 try:
@@ -37,7 +35,7 @@ except NameError:  # pragma: no cover
 
 
 
 
 def subclass_exception(name, parent, module):  # noqa
 def subclass_exception(name, parent, module):  # noqa
-    return type(bytes_if_py2(name), (parent,), {'__module__': module})
+    return type(name, (parent,), {'__module__': module})
 
 
 
 
 def find_pickleable_exception(exc, loads=pickle.loads,
 def find_pickleable_exception(exc, loads=pickle.loads,
@@ -181,7 +179,7 @@ def strtobool(term, table={'false': False, 'no': False, '0': False,
                            'on': True, 'off': False}):
                            'on': True, 'off': False}):
     """Convert common terms for true/false to bool
     """Convert common terms for true/false to bool
     (true/false/yes/no/on/off/1/0)."""
     (true/false/yes/no/on/off/1/0)."""
-    if isinstance(term, string_t):
+    if isinstance(term, str):
         try:
         try:
             return table[term.lower()]
             return table[term.lower()]
         except KeyError:
         except KeyError:
@@ -190,7 +188,7 @@ def strtobool(term, table={'false': False, 'no': False, '0': False,
 
 
 
 
 def jsonify(obj,
 def jsonify(obj,
-            builtin_types=(numbers.Real, string_t), key=None,
+            builtin_types=(numbers.Real, str), key=None,
             keyfilter=None,
             keyfilter=None,
             unknown_type_filter=None):
             unknown_type_filter=None):
     """Transforms object making it suitable for json serialization"""
     """Transforms object making it suitable for json serialization"""
@@ -208,7 +206,7 @@ def jsonify(obj,
         return [_jsonify(v) for v in obj]
         return [_jsonify(v) for v in obj]
     elif isinstance(obj, dict):
     elif isinstance(obj, dict):
         return {
         return {
-            k: _jsonify(v, key=k) for k, v in items(obj)
+            k: _jsonify(v, key=k) for k, v in obj.items()
             if (keyfilter(k) if keyfilter else 1)
             if (keyfilter(k) if keyfilter else 1)
         }
         }
     elif isinstance(obj, datetime.datetime):
     elif isinstance(obj, datetime.datetime):
@@ -242,7 +240,7 @@ def maybe_reraise():
     exc_info = sys.exc_info()
     exc_info = sys.exc_info()
     try:
     try:
         if exc_info[2]:
         if exc_info[2]:
-            reraise(exc_info[0], exc_info[1], exc_info[2])
+            raise
     finally:
     finally:
         # see http://docs.python.org/library/sys.html#sys.exc_info
         # see http://docs.python.org/library/sys.html#sys.exc_info
         del(exc_info)
         del(exc_info)

+ 8 - 10
celery/utils/term.py

@@ -6,8 +6,6 @@ import platform
 
 
 from functools import reduce
 from functools import reduce
 
 
-from celery.five import string
-
 __all__ = ['colored']
 __all__ = ['colored']
 
 
 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
 BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE = range(8)
@@ -47,36 +45,36 @@ class colored:
                       'white': self.white}
                       'white': self.white}
 
 
     def _add(self, a, b):
     def _add(self, a, b):
-        return string(a) + string(b)
+        return str(a) + str(b)
 
 
     def _fold_no_color(self, a, b):
     def _fold_no_color(self, a, b):
         try:
         try:
             A = a.no_color()
             A = a.no_color()
         except AttributeError:
         except AttributeError:
-            A = string(a)
+            A = str(a)
         try:
         try:
             B = b.no_color()
             B = b.no_color()
         except AttributeError:
         except AttributeError:
-            B = string(b)
+            B = str(b)
 
 
-        return ''.join((string(A), string(B)))
+        return ''.join((str(A), str(B)))
 
 
     def no_color(self):
     def no_color(self):
         if self.s:
         if self.s:
-            return string(reduce(self._fold_no_color, self.s))
+            return str(reduce(self._fold_no_color, self.s))
         return ''
         return ''
 
 
     def embed(self):
     def embed(self):
         prefix = ''
         prefix = ''
         if self.enabled:
         if self.enabled:
             prefix = self.op
             prefix = self.op
-        return ''.join((string(prefix), string(reduce(self._add, self.s))))
+        return ''.join((str(prefix), str(reduce(self._add, self.s))))
 
 
     def __str__(self):
     def __str__(self):
         suffix = ''
         suffix = ''
         if self.enabled:
         if self.enabled:
             suffix = RESET_SEQ
             suffix = RESET_SEQ
-        return string(''.join((self.embed(), string(suffix))))
+        return str(''.join((self.embed(), str(suffix))))
 
 
     def node(self, s, op):
     def node(self, s, op):
         return self.__class__(enabled=self.enabled, op=op, *s)
         return self.__class__(enabled=self.enabled, op=op, *s)
@@ -148,4 +146,4 @@ class colored:
         return self.node(s or [''], RESET_SEQ)
         return self.node(s or [''], RESET_SEQ)
 
 
     def __add__(self, other):
     def __add__(self, other):
-        return string(self) + string(other)
+        return str(self) + str(other)

+ 1 - 3
celery/utils/text.py

@@ -10,8 +10,6 @@ from textwrap import fill
 
 
 from pprint import pformat
 from pprint import pformat
 
 
-from celery.five import string_t
-
 __all__ = [
 __all__ = [
     'abbr', 'abbrtask', 'dedent', 'dedent_initial',
     'abbr', 'abbrtask', 'dedent', 'dedent_initial',
     'ensure_newlines', 'ensure_sep',
     'ensure_newlines', 'ensure_sep',
@@ -29,7 +27,7 @@ RE_FORMAT = re.compile(r'%(\w)')
 
 
 
 
 def str_to_list(s):
 def str_to_list(s):
-    if isinstance(s, string_t):
+    if isinstance(s, str):
         return s.split(',')
         return s.split(',')
     return s
     return s
 
 

+ 2 - 3
celery/utils/threads.py

@@ -11,7 +11,6 @@ import traceback
 from contextlib import contextmanager
 from contextlib import contextmanager
 
 
 from celery.local import Proxy
 from celery.local import Proxy
-from celery.five import THREAD_TIMEOUT_MAX, items
 
 
 try:
 try:
     from greenlet import getcurrent as get_ident
     from greenlet import getcurrent as get_ident
@@ -90,7 +89,7 @@ class bgThread(threading.Thread):
         self._is_shutdown.set()
         self._is_shutdown.set()
         self._is_stopped.wait()
         self._is_stopped.wait()
         if self.is_alive():
         if self.is_alive():
-            self.join(THREAD_TIMEOUT_MAX)
+            self.join(threading.TIMEOUT_MAX)
 
 
 
 
 def release_local(local):
 def release_local(local):
@@ -121,7 +120,7 @@ class Local:
         object.__setattr__(self, '__ident_func__', get_ident)
         object.__setattr__(self, '__ident_func__', get_ident)
 
 
     def __iter__(self):
     def __iter__(self):
-        return iter(items(self.__storage__))
+        return iter(self.__storage__.items())
 
 
     def __call__(self, proxy):
     def __call__(self, proxy):
         """Create a proxy for a name."""
         """Create a proxy for a name."""

+ 1 - 3
celery/utils/timer2.py

@@ -15,8 +15,6 @@ import threading
 from itertools import count
 from itertools import count
 from time import sleep
 from time import sleep
 
 
-from celery.five import THREAD_TIMEOUT_MAX
-
 from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger
 from kombu.async.timer import Entry, Timer as Schedule, to_timestamp, logger
 
 
 TIMER_DEBUG = os.environ.get('TIMER_DEBUG')
 TIMER_DEBUG = os.environ.get('TIMER_DEBUG')
@@ -92,7 +90,7 @@ class Timer(threading.Thread):
         self._is_shutdown.set()
         self._is_shutdown.set()
         if self.running:
         if self.running:
             self._is_stopped.wait()
             self._is_stopped.wait()
-            self.join(THREAD_TIMEOUT_MAX)
+            self.join(threading.TIMEOUT_MAX)
             self.running = False
             self.running = False
 
 
     def ensure_started(self):
     def ensure_started(self):

+ 2 - 4
celery/utils/timeutils.py

@@ -14,8 +14,6 @@ from kombu.utils import cached_property, reprcall
 
 
 from pytz import timezone as _timezone, AmbiguousTimeError, FixedOffset
 from pytz import timezone as _timezone, AmbiguousTimeError, FixedOffset
 
 
-from celery.five import string_t
-
 from .functional import dictfilter
 from .functional import dictfilter
 from .iso8601 import parse_iso8601
 from .iso8601 import parse_iso8601
 from .text import pluralize
 from .text import pluralize
@@ -140,7 +138,7 @@ class _Zone:
         return localize(dt, self.local)
         return localize(dt, self.local)
 
 
     def get_timezone(self, zone):
     def get_timezone(self, zone):
-        if isinstance(zone, string_t):
+        if isinstance(zone, str):
             return _timezone(zone)
             return _timezone(zone)
         return zone
         return zone
 
 
@@ -219,7 +217,7 @@ def rate(rate):
     """Parse rate strings, such as `"100/m"`, `"2/h"` or `"0.5/s"`
     """Parse rate strings, such as `"100/m"`, `"2/h"` or `"0.5/s"`
     and convert them to seconds."""
     and convert them to seconds."""
     if rate:
     if rate:
-        if isinstance(rate, string_t):
+        if isinstance(rate, str):
             ops, _, modifier = rate.partition('/')
             ops, _, modifier = rate.partition('/')
             return RATE_MODIFIER_MAP[modifier or 's'](float(ops)) or 0
             return RATE_MODIFIER_MAP[modifier or 's'](float(ops)) or 0
         return rate or 0
         return rate or 0

+ 1 - 2
celery/worker/__init__.py

@@ -33,7 +33,6 @@ from celery import signals
 from celery.exceptions import (
 from celery.exceptions import (
     ImproperlyConfigured, WorkerTerminate, TaskRevokedError,
     ImproperlyConfigured, WorkerTerminate, TaskRevokedError,
 )
 )
-from celery.five import values
 from celery.platforms import EX_FAILURE, create_pidlock
 from celery.platforms import EX_FAILURE, create_pidlock
 from celery.utils.imports import reload_from_cwd
 from celery.utils.imports import reload_from_cwd
 from celery.utils.log import mlevel, worker_logger as logger
 from celery.utils.log import mlevel, worker_logger as logger
@@ -190,7 +189,7 @@ class WorkController:
             [self.app.loader.import_task_module(m) for m in includes]
             [self.app.loader.import_task_module(m) for m in includes]
         self.include = includes
         self.include = includes
         task_modules = {task.__class__.__module__
         task_modules = {task.__class__.__module__
-                        for task in values(self.app.tasks)}
+                        for task in self.app.tasks.values()}
         self.app.conf.include = tuple(set(prev) | task_modules)
         self.app.conf.include = tuple(set(prev) | task_modules)
 
 
     def prepare_args(self, **kwargs):
     def prepare_args(self, **kwargs):

+ 4 - 4
celery/worker/consumer/consumer.py

@@ -26,7 +26,7 @@ from celery import bootsteps
 from celery import signals
 from celery import signals
 from celery.app.trace import build_tracer
 from celery.app.trace import build_tracer
 from celery.exceptions import InvalidTaskError, NotRegistered
 from celery.exceptions import InvalidTaskError, NotRegistered
-from celery.five import buffer_t, items, values
+from celery.five import buffer_t
 from celery.utils.functional import noop
 from celery.utils.functional import noop
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 from celery.utils.nodenames import gethostname
 from celery.utils.nodenames import gethostname
@@ -230,7 +230,7 @@ class Consumer:
 
 
     def reset_rate_limits(self):
     def reset_rate_limits(self):
         self.task_buckets.update(
         self.task_buckets.update(
-            (n, self.bucket_for_task(t)) for n, t in items(self.app.tasks)
+            (n, self.bucket_for_task(t)) for n, t in self.app.tasks.items()
         )
         )
 
 
     def _update_prefetch_count(self, index=0):
     def _update_prefetch_count(self, index=0):
@@ -381,7 +381,7 @@ class Consumer:
             self.controller.semaphore.clear()
             self.controller.semaphore.clear()
         if self.timer:
         if self.timer:
             self.timer.clear()
             self.timer.clear()
-        for bucket in values(self.task_buckets):
+        for bucket in self.task_buckets.values():
             if bucket:
             if bucket:
                 bucket.clear_pending()
                 bucket.clear_pending()
         reserved_requests.clear()
         reserved_requests.clear()
@@ -507,7 +507,7 @@ class Consumer:
 
 
     def update_strategies(self):
     def update_strategies(self):
         loader = self.app.loader
         loader = self.app.loader
-        for name, task in items(self.app.tasks):
+        for name, task in self.app.tasks.items():
             self.strategies[name] = task.start_strategy(self.app, self)
             self.strategies[name] = task.start_strategy(self.app, self)
             task.__trace__ = build_tracer(name, task, loader, self.hostname,
             task.__trace__ = build_tracer(name, task, loader, self.hostname,
                                           app=self.app)
                                           app=self.app)

+ 1 - 2
celery/worker/consumer/gossip.py

@@ -10,7 +10,6 @@ from kombu import Consumer
 from kombu.async.semaphore import DummyLock
 from kombu.async.semaphore import DummyLock
 
 
 from celery import bootsteps
 from celery import bootsteps
-from celery.five import values
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 from celery.utils.objects import Bunch
 from celery.utils.objects import Bunch
 
 
@@ -156,7 +155,7 @@ class Gossip(bootsteps.ConsumerStep):
     def periodic(self):
     def periodic(self):
         workers = self.state.workers
         workers = self.state.workers
         dirty = set()
         dirty = set()
-        for worker in values(workers):
+        for worker in workers.values():
             if not worker.alive:
             if not worker.alive:
                 dirty.add(worker)
                 dirty.add(worker)
                 self.on_node_lost(worker)
                 self.on_node_lost(worker)

+ 2 - 3
celery/worker/consumer/mingle.py

@@ -2,7 +2,6 @@
 from __future__ import absolute_import, unicode_literals
 from __future__ import absolute_import, unicode_literals
 
 
 from celery import bootsteps
 from celery import bootsteps
-from celery.five import items
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
 
 
 from .events import Events
 from .events import Events
@@ -34,9 +33,9 @@ class Mingle(bootsteps.StartStopStep):
         replies.pop(c.hostname, None)  # delete my own response
         replies.pop(c.hostname, None)  # delete my own response
         if replies:
         if replies:
             info('mingle: sync with %s nodes',
             info('mingle: sync with %s nodes',
-                 len([reply for reply, value in items(replies) if value]))
+                 len([reply for reply, value in replies.items() if value]))
             [self.on_node_reply(c, nodename, reply)
             [self.on_node_reply(c, nodename, reply)
-             for nodename, reply in items(replies) if reply]
+             for nodename, reply in replies.items() if reply]
             info('mingle: sync complete')
             info('mingle: sync complete')
         else:
         else:
             info('mingle: all alone')
             info('mingle: all alone')

+ 4 - 3
celery/worker/control.py

@@ -5,11 +5,12 @@ from __future__ import absolute_import, unicode_literals
 import io
 import io
 import tempfile
 import tempfile
 
 
+from collections import UserDict
+
 from billiard.common import TERM_SIGNAME
 from billiard.common import TERM_SIGNAME
 from kombu.utils.encoding import safe_repr
 from kombu.utils.encoding import safe_repr
 
 
 from celery.exceptions import WorkerShutdown
 from celery.exceptions import WorkerShutdown
-from celery.five import UserDict, items, string_t
 from celery.platforms import signals as _signals
 from celery.platforms import signals as _signals
 from celery.utils import timeutils
 from celery.utils import timeutils
 from celery.utils.functional import maybe_list
 from celery.utils.functional import maybe_list
@@ -59,7 +60,7 @@ def dump_conf(state, with_defaults=False, **kwargs):
 
 
 
 
 def _wanted_config_key(key):
 def _wanted_config_key(key):
-    return isinstance(key, string_t) and not key.startswith('__')
+    return isinstance(key, str) and not key.startswith('__')
 
 
 
 
 # -- Task
 # -- Task
@@ -292,7 +293,7 @@ def dump_tasks(state, taskinfoitems=None, builtins=False, **kwargs):
             if getattr(task, field, None) is not None
             if getattr(task, field, None) is not None
         }
         }
         if fields:
         if fields:
-            info = ['='.join(f) for f in items(fields)]
+            info = ['='.join(f) for f in fields.items()]
             return '{0} [{1}]'.format(task.name, ' '.join(info))
             return '{0} [{1}]'.format(task.name, ' '.join(info))
         return task.name
         return task.name
 
 

+ 1 - 2
celery/worker/request.py

@@ -20,7 +20,6 @@ from celery.exceptions import (
     SoftTimeLimitExceeded, TimeLimitExceeded,
     SoftTimeLimitExceeded, TimeLimitExceeded,
     WorkerLostError, Terminated, Retry, Reject,
     WorkerLostError, Terminated, Retry, Reject,
 )
 )
-from celery.five import string
 from celery.platforms import signals as _signals
 from celery.platforms import signals as _signals
 from celery.utils.functional import noop
 from celery.utils.functional import noop
 from celery.utils.log import get_logger
 from celery.utils.log import get_logger
@@ -344,7 +343,7 @@ class Request:
         # time to write the result.
         # time to write the result.
         if isinstance(exc, Terminated):
         if isinstance(exc, Terminated):
             self._announce_revoked(
             self._announce_revoked(
-                'terminated', True, string(exc), False)
+                'terminated', True, str(exc), False)
             send_failed_event = False  # already sent revoked event
             send_failed_event = False  # already sent revoked event
         elif isinstance(exc, WorkerLostError) or not return_ok:
         elif isinstance(exc, WorkerLostError) or not return_ok:
             self.task.backend.mark_as_failure(
             self.task.backend.mark_as_failure(

+ 4 - 2
celery/worker/state.py

@@ -13,12 +13,13 @@ import shelve
 import weakref
 import weakref
 import zlib
 import zlib
 
 
+from collections import Counter
+
 from kombu.serialization import pickle, pickle_protocol
 from kombu.serialization import pickle, pickle_protocol
 from kombu.utils import cached_property
 from kombu.utils import cached_property
 
 
 from celery import __version__
 from celery import __version__
 from celery.exceptions import WorkerShutdown, WorkerTerminate
 from celery.exceptions import WorkerShutdown, WorkerTerminate
-from celery.five import Counter
 from celery.utils.collections import LimitedSet
 from celery.utils.collections import LimitedSet
 
 
 __all__ = [
 __all__ = [
@@ -113,8 +114,9 @@ C_BENCH_EVERY = int(os.environ.get('C_BENCH_EVERY') or
 if C_BENCH:  # pragma: no cover
 if C_BENCH:  # pragma: no cover
     import atexit
     import atexit
 
 
+    from time import monotonic
+
     from billiard.process import current_process
     from billiard.process import current_process
-    from celery.five import monotonic
     from celery.utils.debug import memdump, sample_mem
     from celery.utils.debug import memdump, sample_mem
 
 
     all_count = 0
     all_count = 0

+ 2 - 1
docs/tutorials/task-cookbook.rst

@@ -37,8 +37,9 @@ For this reason your tasks run-time should not exceed the timeout.
 
 
 .. code-block:: python
 .. code-block:: python
 
 
+    from time import monotonic
+
     from celery import task
     from celery import task
-    from celery.five import monotonic
     from celery.utils.log import get_task_logger
     from celery.utils.log import get_task_logger
     from contextlib import contextmanager
     from contextlib import contextmanager
     from django.core.cache import cache
     from django.core.cache import cache

+ 2 - 2
funtests/benchmarks/bench_worker.py

@@ -3,14 +3,14 @@ from __future__ import absolute_import, print_function, unicode_literals
 import os
 import os
 import sys
 import sys
 
 
+from time import monotonic
+
 os.environ.update(
 os.environ.update(
     NOSETPS='yes',
     NOSETPS='yes',
     USE_FAST_LOCALS='yes',
     USE_FAST_LOCALS='yes',
 )
 )
 
 
 from celery import Celery  # noqa
 from celery import Celery  # noqa
-from celery.five import range  # noqa
-from kombu.five import monotonic  # noqa
 
 
 DEFAULT_ITS = 40000
 DEFAULT_ITS = 40000
 
 

+ 0 - 1
funtests/suite/test_leak.py

@@ -7,7 +7,6 @@ import shlex
 import subprocess
 import subprocess
 
 
 from celery import current_app
 from celery import current_app
-from celery.five import range
 from celery.tests.case import SkipTest, unittest
 from celery.tests.case import SkipTest, unittest
 
 
 import suite  # noqa
 import suite  # noqa