{"action":"closed","issue":{"url":"https://api.github.com/repos/celery/celery/issues/4913","repository_url":"https://api.github.com/repos/celery/celery","labels_url":"https://api.github.com/repos/celery/celery/issues/4913/labels{/name}","comments_url":"https://api.github.com/repos/celery/celery/issues/4913/comments","events_url":"https://api.github.com/repos/celery/celery/issues/4913/events","html_url":"https://github.com/celery/celery/issues/4913","id":342622403,"node_id":"MDU6SXNzdWUzNDI2MjI0MDM=","number":4913,"title":"Tests fail on python 3.7","user":{"login":"eli-schwartz","id":6551424,"node_id":"MDQ6VXNlcjY1NTE0MjQ=","avatar_url":"https://avatars1.githubusercontent.com/u/6551424?v=4","gravatar_id":"","url":"https://api.github.com/users/eli-schwartz","html_url":"https://github.com/eli-schwartz","followers_url":"https://api.github.com/users/eli-schwartz/followers","following_url":"https://api.github.com/users/eli-schwartz/following{/other_user}","gists_url":"https://api.github.com/users/eli-schwartz/gists{/gist_id}","starred_url":"https://api.github.com/users/eli-schwartz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eli-schwartz/subscriptions","organizations_url":"https://api.github.com/users/eli-schwartz/orgs","repos_url":"https://api.github.com/users/eli-schwartz/repos","events_url":"https://api.github.com/users/eli-schwartz/events{/privacy}","received_events_url":"https://api.github.com/users/eli-schwartz/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":13,"created_at":"2018-07-19T08:09:01Z","updated_at":"2018-08-14T09:55:09Z","closed_at":"2018-08-14T09:55:09Z","author_association":"NONE","body":"Arch Linux is currently trying to upgrade to python 3.7, and during the process of rebuilding all packages, celery failed to build with... several types of errors.\r\n\r\nAfter backporting all existing python 3.7 compat commits from master on top of release 4.2.1, no more async errors exist, but the testsuite still fails. Testing with git master confirms that the following errors persist there too:\r\n\r\n```\r\n=================================== FAILURES ===================================\r\n_______________ test_asynloop.test_poll_write_generator_stopped ________________\r\n\r\n    def Gen():\r\n>       raise StopIteration()\r\nE       StopIteration\r\n\r\nt/unit/worker/test_loops.py:375: StopIteration\r\n\r\nThe above exception was the direct cause of the following exception:\r\n\r\nself = <t.unit.worker.test_loops.test_asynloop object at 0x7f64a7528978>\r\n\r\n>   ???\r\n\r\nt/unit/worker/test_loops.py:383: \r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\ncelery/worker/loops.py:91: in asynloop\r\n    next(loop)\r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\n\r\nself = <Hub@0x7f64a74a9be0: R:0 W:1>, generator = <class 'generator'>\r\nsleep = <built-in function sleep>, min = <built-in function min>\r\nnext = <built-in function next>, Empty = <class '_queue.Empty'>\r\nStopIteration = <class 'StopIteration'>, KeyError = <class 'KeyError'>, READ = 1\r\nWRITE = 4, ERR = 24\r\n\r\n    def create_loop(self,\r\n                    generator=generator, sleep=sleep, min=min, next=next,\r\n                    Empty=Empty, StopIteration=StopIteration,\r\n                    KeyError=KeyError, READ=READ, WRITE=WRITE, ERR=ERR):\r\n        readers, writers = self.readers, self.writers\r\n        poll = self.poller.poll\r\n        fire_timers = self.fire_timers\r\n        hub_remove = self.remove\r\n        scheduled = self.timer._queue\r\n        consolidate = self.consolidate\r\n        consolidate_callback = self.consolidate_callback\r\n        on_tick = self.on_tick\r\n        propagate = self.propagate_errors\r\n        todo = self._ready\r\n    \r\n        while 1:\r\n            for tick_callback in on_tick:\r\n                tick_callback()\r\n    \r\n            # To avoid infinite loop where one of the callables adds items\r\n            # to self._ready (via call_soon or otherwise), we take pop only\r\n            # N items from the ready set.\r\n            # N represents the current number of items on the set.\r\n            # That way if a todo adds another one to the ready set,\r\n            # we will break early and allow execution of readers and writers.\r\n            current_todos = len(todo)\r\n            for _ in itertools.repeat(None, current_todos):\r\n                if not todo:\r\n                    break\r\n    \r\n                item = todo.pop()\r\n                if item:\r\n                    item()\r\n    \r\n            poll_timeout = fire_timers(propagate=propagate) if scheduled else 1\r\n            #  print('[[[HUB]]]: %s' % (self.repr_active(),))\r\n            if readers or writers:\r\n                to_consolidate = []\r\n                try:\r\n                    events = poll(poll_timeout)\r\n                    #  print('[EVENTS]: %s' % (self.repr_events(events),))\r\n                except ValueError:  # Issue 882\r\n                    raise StopIteration()\r\n    \r\n                for fd, event in events or ():\r\n                    general_error = False\r\n                    if fd in consolidate and \\\r\n                            writers.get(fd) is None:\r\n                        to_consolidate.append(fd)\r\n                        continue\r\n                    cb = cbargs = None\r\n    \r\n                    if event & READ:\r\n                        try:\r\n                            cb, cbargs = readers[fd]\r\n                        except KeyError:\r\n                            self.remove_reader(fd)\r\n                            continue\r\n                    elif event & WRITE:\r\n                        try:\r\n                            cb, cbargs = writers[fd]\r\n                        except KeyError:\r\n                            self.remove_writer(fd)\r\n                            continue\r\n                    elif event & ERR:\r\n                        general_error = True\r\n                    else:\r\n                        logger.info(W_UNKNOWN_EVENT, event, fd)\r\n                        general_error = True\r\n    \r\n                    if general_error:\r\n                        try:\r\n                            cb, cbargs = (readers.get(fd) or\r\n                                          writers.get(fd))\r\n                        except TypeError:\r\n                            pass\r\n    \r\n                    if cb is None:\r\n                        self.remove(fd)\r\n                        continue\r\n    \r\n                    if isinstance(cb, generator):\r\n                        try:\r\n>                           next(cb)\r\nE                           RuntimeError: generator raised StopIteration\r\n\r\n/usr/lib/python3.7/site-packages/kombu/asynchronous/hub.py:342: RuntimeError\r\n__________________ test_asynloop.test_poll_raises_ValueError ___________________\r\n\r\nself = <Hub@0x7f64a73df390: R:1 W:0>, generator = <class 'generator'>\r\nsleep = <built-in function sleep>, min = <built-in function min>\r\nnext = <built-in function next>, Empty = <class '_queue.Empty'>\r\nStopIteration = <class 'StopIteration'>, KeyError = <class 'KeyError'>, READ = 1\r\nWRITE = 4, ERR = 24\r\n\r\n    def create_loop(self,\r\n                    generator=generator, sleep=sleep, min=min, next=next,\r\n                    Empty=Empty, StopIteration=StopIteration,\r\n                    KeyError=KeyError, READ=READ, WRITE=WRITE, ERR=ERR):\r\n        readers, writers = self.readers, self.writers\r\n        poll = self.poller.poll\r\n        fire_timers = self.fire_timers\r\n        hub_remove = self.remove\r\n        scheduled = self.timer._queue\r\n        consolidate = self.consolidate\r\n        consolidate_callback = self.consolidate_callback\r\n        on_tick = self.on_tick\r\n        propagate = self.propagate_errors\r\n        todo = self._ready\r\n    \r\n        while 1:\r\n            for tick_callback in on_tick:\r\n                tick_callback()\r\n    \r\n            # To avoid infinite loop where one of the callables adds items\r\n            # to self._ready (via call_soon or otherwise), we take pop only\r\n            # N items from the ready set.\r\n            # N represents the current number of items on the set.\r\n            # That way if a todo adds another one to the ready set,\r\n            # we will break early and allow execution of readers and writers.\r\n            current_todos = len(todo)\r\n            for _ in itertools.repeat(None, current_todos):\r\n                if not todo:\r\n                    break\r\n    \r\n                item = todo.pop()\r\n                if item:\r\n                    item()\r\n    \r\n            poll_timeout = fire_timers(propagate=propagate) if scheduled else 1\r\n            #  print('[[[HUB]]]: %s' % (self.repr_active(),))\r\n            if readers or writers:\r\n                to_consolidate = []\r\n                try:\r\n>                   events = poll(poll_timeout)\r\n\r\n/usr/lib/python3.7/site-packages/kombu/asynchronous/hub.py:298: \r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\n\r\n_mock_self = <Mock name='hub.poller.poll' id='140070279374552'>, args = (1.7,)\r\nkwargs = {}\r\n\r\n    def __call__(_mock_self, *args, **kwargs):\r\n        # can't use self in-case a function / method we are mocking uses self\r\n        # in the signature\r\n        _mock_self._mock_check_sig(*args, **kwargs)\r\n>       return _mock_self._mock_call(*args, **kwargs)\r\n\r\n/usr/lib/python3.7/unittest/mock.py:951: \r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\n\r\n_mock_self = <Mock name='hub.poller.poll' id='140070279374552'>, args = (1.7,)\r\nkwargs = {}, self = <Mock name='hub.poller.poll' id='140070279374552'>\r\n_new_name = 'poll', _new_parent = None, _call = call(1.7)\r\nseen = {140070562146576}, skip_next_dot = False, do_method_calls = False\r\nname = 'poll', this_mock_call = call.poll(1.7)\r\n\r\n    def _mock_call(_mock_self, *args, **kwargs):\r\n        self = _mock_self\r\n        self.called = True\r\n        self.call_count += 1\r\n        _new_name = self._mock_new_name\r\n        _new_parent = self._mock_new_parent\r\n    \r\n        _call = _Call((args, kwargs), two=True)\r\n        self.call_args = _call\r\n        self.call_args_list.append(_call)\r\n        self.mock_calls.append(_Call(('', args, kwargs)))\r\n    \r\n        seen = set()\r\n        skip_next_dot = _new_name == '()'\r\n        do_method_calls = self._mock_parent is not None\r\n        name = self._mock_name\r\n        while _new_parent is not None:\r\n            this_mock_call = _Call((_new_name, args, kwargs))\r\n            if _new_parent._mock_new_name:\r\n                dot = '.'\r\n                if skip_next_dot:\r\n                    dot = ''\r\n    \r\n                skip_next_dot = False\r\n                if _new_parent._mock_new_name == '()':\r\n                    skip_next_dot = True\r\n    \r\n                _new_name = _new_parent._mock_new_name + dot + _new_name\r\n    \r\n            if do_method_calls:\r\n                if _new_name == name:\r\n                    this_method_call = this_mock_call\r\n                else:\r\n                    this_method_call = _Call((name, args, kwargs))\r\n                _new_parent.method_calls.append(this_method_call)\r\n    \r\n                do_method_calls = _new_parent._mock_parent is not None\r\n                if do_method_calls:\r\n                    name = _new_parent._mock_name + '.' + name\r\n    \r\n            _new_parent.mock_calls.append(this_mock_call)\r\n            _new_parent = _new_parent._mock_new_parent\r\n    \r\n            # use ids here so as not to call __hash__ on the mocks\r\n            _new_parent_id = id(_new_parent)\r\n            if _new_parent_id in seen:\r\n                break\r\n            seen.add(_new_parent_id)\r\n    \r\n        ret_val = DEFAULT\r\n        effect = self.side_effect\r\n        if effect is not None:\r\n            if _is_exception(effect):\r\n                raise effect\r\n    \r\n            if not _callable(effect):\r\n                result = next(effect)\r\n                if _is_exception(result):\r\n                    raise result\r\n                if result is DEFAULT:\r\n                    result = self.return_value\r\n                return result\r\n    \r\n>           ret_val = effect(*args, **kwargs)\r\n\r\n/usr/lib/python3.7/unittest/mock.py:1017: \r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\n\r\nargs = (1.7,), kwargs = {}\r\n\r\n    def first(*args, **kwargs):\r\n        if not mod or mock.call_count > mod:\r\n            self.close()\r\n>           raise (socket.error() if exc is None else exc)\r\nE           ValueError\r\n\r\nt/unit/worker/test_loops.py:109: ValueError\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nself = <Hub@0x7f64a73df390: R:1 W:0>, generator = <class 'generator'>\r\nsleep = <built-in function sleep>, min = <built-in function min>\r\nnext = <built-in function next>, Empty = <class '_queue.Empty'>\r\nStopIteration = <class 'StopIteration'>, KeyError = <class 'KeyError'>, READ = 1\r\nWRITE = 4, ERR = 24\r\n\r\n    def create_loop(self,\r\n                    generator=generator, sleep=sleep, min=min, next=next,\r\n                    Empty=Empty, StopIteration=StopIteration,\r\n                    KeyError=KeyError, READ=READ, WRITE=WRITE, ERR=ERR):\r\n        readers, writers = self.readers, self.writers\r\n        poll = self.poller.poll\r\n        fire_timers = self.fire_timers\r\n        hub_remove = self.remove\r\n        scheduled = self.timer._queue\r\n        consolidate = self.consolidate\r\n        consolidate_callback = self.consolidate_callback\r\n        on_tick = self.on_tick\r\n        propagate = self.propagate_errors\r\n        todo = self._ready\r\n    \r\n        while 1:\r\n            for tick_callback in on_tick:\r\n                tick_callback()\r\n    \r\n            # To avoid infinite loop where one of the callables adds items\r\n            # to self._ready (via call_soon or otherwise), we take pop only\r\n            # N items from the ready set.\r\n            # N represents the current number of items on the set.\r\n            # That way if a todo adds another one to the ready set,\r\n            # we will break early and allow execution of readers and writers.\r\n            current_todos = len(todo)\r\n            for _ in itertools.repeat(None, current_todos):\r\n                if not todo:\r\n                    break\r\n    \r\n                item = todo.pop()\r\n                if item:\r\n                    item()\r\n    \r\n            poll_timeout = fire_timers(propagate=propagate) if scheduled else 1\r\n            #  print('[[[HUB]]]: %s' % (self.repr_active(),))\r\n            if readers or writers:\r\n                to_consolidate = []\r\n                try:\r\n                    events = poll(poll_timeout)\r\n                    #  print('[EVENTS]: %s' % (self.repr_events(events),))\r\n                except ValueError:  # Issue 882\r\n>                   raise StopIteration()\r\nE                   StopIteration\r\n\r\n/usr/lib/python3.7/site-packages/kombu/asynchronous/hub.py:301: StopIteration\r\n\r\nThe above exception was the direct cause of the following exception:\r\n\r\nself = <t.unit.worker.test_loops.test_asynloop object at 0x7f64a74a3da0>\r\n\r\n    def test_poll_raises_ValueError(self):\r\n        x = X(self.app)\r\n        x.hub.readers = {6: Mock()}\r\n        poller = x.hub.poller\r\n        x.close_then_error(poller.poll, exc=ValueError)\r\n>       asynloop(*x.args)\r\n\r\nt/unit/worker/test_loops.py:419: \r\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \r\n\r\nobj = <Mock name='obj' id='140070279312440'>\r\nconnection = <Mock name='connection' id='140070279312496'>\r\nconsumer = <Mock name='consumer' id='140070279312608'>\r\nblueprint = <Mock name='blueprint' id='140070279312720'>\r\nhub = <Hub@0x7f64a73df390: R:1 W:0>\r\nqos = <Mock name='qos' id='140070279312832'>, heartbeat = None\r\nclock = <Mock name='clock' id='140070279312944'>, hbrate = 2.0\r\n\r\n    def asynloop(obj, connection, consumer, blueprint, hub, qos,\r\n                 heartbeat, clock, hbrate=2.0):\r\n        \"\"\"Non-blocking event loop.\"\"\"\r\n        RUN = bootsteps.RUN\r\n        update_qos = qos.update\r\n        errors = connection.connection_errors\r\n    \r\n        on_task_received = obj.create_task_handler()\r\n    \r\n        _enable_amqheartbeats(hub.timer, connection, rate=hbrate)\r\n    \r\n        consumer.on_message = on_task_received\r\n        obj.controller.register_with_event_loop(hub)\r\n        obj.register_with_event_loop(hub)\r\n        consumer.consume()\r\n        obj.on_ready()\r\n    \r\n        # did_start_ok will verify that pool processes were able to start,\r\n        # but this will only work the first time we start, as\r\n        # maxtasksperchild will mess up metrics.\r\n        if not obj.restart_count and not obj.pool.did_start_ok():\r\n            raise WorkerLostError('Could not start worker processes')\r\n    \r\n        # consumer.consume() may have prefetched up to our\r\n        # limit - drain an event so we're in a clean state\r\n        # prior to starting our event loop.\r\n        if connection.transport.driver_type == 'amqp':\r\n            hub.call_soon(_quick_drain, connection)\r\n    \r\n        # FIXME: Use loop.run_forever\r\n        # Tried and works, but no time to test properly before release.\r\n        hub.propagate_errors = errors\r\n        loop = hub.create_loop()\r\n    \r\n        try:\r\n            while blueprint.state == RUN and obj.connection:\r\n                # shutdown if signal handlers told us to.\r\n                should_stop, should_terminate = (\r\n                    state.should_stop, state.should_terminate,\r\n                )\r\n                # False == EX_OK, so must use is not False\r\n                if should_stop is not None and should_stop is not False:\r\n                    raise WorkerShutdown(should_stop)\r\n                elif should_terminate is not None and should_stop is not False:\r\n                    raise WorkerTerminate(should_terminate)\r\n    \r\n                # We only update QoS when there's no more messages to read.\r\n                # This groups together qos calls, and makes sure that remote\r\n                # control commands will be prioritized over task messages.\r\n                if qos.prev != qos.value:\r\n                    update_qos()\r\n    \r\n                try:\r\n>                   next(loop)\r\nE                   RuntimeError: generator raised StopIteration\r\n\r\ncelery/worker/loops.py:91: RuntimeError\r\n=============================== warnings summary ===============================\r\nt/unit/app/test_backends.py::test_backends::()::test_get_backend_aliases[amqp://-AMQPBackend]\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_destination_for\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_store_result__no_routing_key\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_mark_as_done\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_pickleable\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_revive\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_is_pickled\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_mark_as_failure\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_expires_is_int\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_expires_is_float\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_expires_is_timedelta\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_store_result_retries\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_poll_no_messages\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_backlog_limit_exceeded\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_poll_result\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_drain_events_decodes_exceptions_in_meta\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_no_expires\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_process_cleanup\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_reload_task_result\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_reload_group_result\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_save_group\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_restore_group\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/backends/test_amqp.py::test_AMQPBackend::()::test_delete_group\r\n  /build/python-celery/src/celery-4.2.1/celery/backends/amqp.py:67: CPendingDeprecationWarning: \r\n      The AMQP result backend is scheduled for deprecation in     version 4.0 and removal in version v5.0.     Please use RPC backend or a persistent backend.\r\n  \r\n    alternative='Please use RPC backend or a persistent backend.')\r\n\r\nt/unit/bin/test_worker.py::test_Worker::()::test_warns_if_running_as_privileged_user\r\n  /build/python-celery/src/celery-4.2.1/celery/platforms.py:796: RuntimeWarning: You're running the worker with superuser privileges: this is\r\n  absolutely not recommended!\r\n  \r\n  Please specify a different user using the --uid option.\r\n  \r\n  User information: uid=0 euid=1000 gid=1000 egid=1000\r\n  \r\n    uid=uid, euid=euid, gid=gid, egid=egid,\r\n\r\nt/unit/worker/test_request.py::test_Request::()::test_from_message_invalid_kwargs\r\n  /build/python-celery/src/celery-4.2.1/celery/app/trace.py:561: RuntimeWarning: Exception raised outside body: InvalidTaskError('Task keyword arguments is not a mapping'):\r\n  Traceback (most recent call last):\r\n    File \"/build/python-celery/src/celery-4.2.1/celery/app/trace.py\", line 359, in trace_task\r\n      kwargs.items\r\n  AttributeError: 'str' object has no attribute 'items'\r\n  \r\n  During handling of the above exception, another exception occurred:\r\n  \r\n  Traceback (most recent call last):\r\n    File \"/build/python-celery/src/celery-4.2.1/celery/app/trace.py\", line 362, in trace_task\r\n      'Task keyword arguments is not a mapping')\r\n  celery.exceptions.InvalidTaskError: Task keyword arguments is not a mapping\r\n  \r\n    exc, exc_info.traceback)))\r\n\r\n-- Docs: http://doc.pytest.org/en/latest/warnings.html\r\n======= 2 failed, 2304 passed, 89 skipped, 25 warnings in 50.71 seconds ========\r\n```"}}
{"actor":{"display_login":"auvipy"}}