1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.
  2. Anuncie Aqui
    Anuncie aqui você Também: fdantas@4each.com.br

[Python] Error: 'Did you remember to import the module containing this task?'

Discussão em 'Python' iniciado por Stack, Setembro 11, 2024.

  1. Stack

    Stack Membro Participativo

    I have this project https://github.com/LucasLeone/LaPanaSystem. I created a task for check the sales for change the state but doesn't work. The error:

    lapanasystem_local_celeryworker | [2024-09-10 23:47:20,238: ERROR/SpawnProcess-8] Received unregistered task of type 'check_sales_for_delivery'.

    lapanasystem_local_celeryworker | The message has been ignored and discarded.

    lapanasystem_local_celeryworker |

    lapanasystem_local_celeryworker | Did you remember to import the module containing this task?

    lapanasystem_local_celeryworker | Or maybe you're using relative imports?

    lapanasystem_local_celeryworker |

    lapanasystem_local_celeryworker | Please see

    lapanasystem_local_celeryworker | https://docs.celeryq.dev/en/latest/internals/protocol.html

    lapanasystem_local_celeryworker | for more information.

    lapanasystem_local_celeryworker |

    lapanasystem_local_celeryworker | The full contents of the message body was:

    lapanasystem_local_celeryworker | b'[[], {}, {"callbacks": null, "errbacks": null, "chain": null, "chord": null}]' (77b)

    lapanasystem_local_celeryworker |

    lapanasystem_local_celeryworker | The full contents of the message headers:

    lapanasystem_local_celeryworker | {'lang': 'py', 'task': 'check_sales_for_delivery', 'id': '5cdd77f4-6b48-4274-8edb-0926ac3419e0', 'shadow': None, 'eta': None, 'expires': None, 'group': None, 'group_index': None, 'retries': 0, 'timelimit': [None, None], 'root_id': '5cdd77f4-6b48-4274-8edb-0926ac3419e0', 'parent_id': None, 'argsrepr': '()', 'kwargsrepr': '{}', 'origin': 'gen18@ace8c29fe6f1', 'ignore_result': False, 'replaced_task_nesting': 0, 'stamped_headers': None, 'stamps': {}}

    lapanasystem_local_celeryworker |

    lapanasystem_local_celeryworker | The delivery info for this task is:

    lapanasystem_local_celeryworker | {'exchange': '', 'routing_key': 'celery'}

    lapanasystem_local_celeryworker | Traceback (most recent call last):

    lapanasystem_local_celeryworker | File "/usr/local/lib/python3.12/site-packages/celery/worker/consumer/consumer.py", line 659, in on_task_received

    lapanasystem_local_celeryworker | strategy = strategies[type_]

    lapanasystem_local_celeryworker | ~~~~~~~~~~^^^^^^^

    lapanasystem_local_celeryworker | KeyError: 'check_sales_for_delivery'

    I have 'lapanasystem.taskapp.tasks.py':

    """Celery tasks."""

    # Django
    from django.db.models import OuterRef, Subquery

    # Models
    from lapanasystem.sales.models import Sale, StateChange

    # Celery
    from celery import shared_task

    # Utilities
    from datetime import date, datetime


    def change_state_to_ready_for_delivery(sale_id):
    """Change state to ready for delivery."""
    sale = Sale.objects.get(id=sale_id)

    last_state_change = StateChange.objects.filter(sale=sale).order_by('-start_date').first()

    if last_state_change and last_state_change.end_date is None:
    last_state_change.end_date = datetime.now()
    last_state_change.save()

    StateChange.objects.create(sale=sale, state=StateChange.PENDIENTE_ENTREGA)


    @shared_task(name='check_sales_for_delivery')
    def check_sales_for_delivery():
    """Check all sales with today's date and change their state to 'Pending for delivery'."""
    today = date.today()

    last_state_change = StateChange.objects.filter(
    sale=OuterRef('pk')
    ).order_by('-start_date')

    sales = Sale.objects.filter(
    date__date=today,
    is_active=True,
    state_changes__state=Subquery(last_state_change.values('state')[:1])
    )

    for sale in sales:
    change_state_to_ready_for_delivery.delay(sale.id)


    I tried to add Command:

    """Script to create a periodic task for checking and updating subscriptions daily"""

    # Django
    from django.core.management.base import BaseCommand
    from django.utils.timezone import now

    # Celery
    from django_celery_beat.models import PeriodicTask, CrontabSchedule


    class Command(BaseCommand):
    help = 'Create a periodic task for checking and updating subscriptions daily'

    def handle(self, *args, **kwargs):
    # Crear o obtener el CrontabSchedule para las 3:00 AM
    schedule, created = CrontabSchedule.objects.get_or_create(
    minute='0',
    hour='3',
    day_of_week='*',
    day_of_month='*',
    month_of_year='*',
    )

    # Verificar si ya existe la tarea periódica
    if not PeriodicTask.objects.filter(name='Check and update sales at 3:00 AM').exists():
    # Crear la tarea periódica
    PeriodicTask.objects.create(
    crontab=schedule,
    name='Check and update sales at 3:00 AM',
    task='check_sales_for_delivery',
    start_time=now(),
    )
    self.stdout.write(self.style.SUCCESS('Periodic task created successfully'))
    else:
    self.stdout.write(self.style.WARNING('Periodic task already exists'))


    that raise the error.

    Continue reading...

Compartilhe esta Página