Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Cannot access project models in my tasks.py #2613

Closed
lukeoiler opened this issue Jun 3, 2020 · 8 comments
Closed

Cannot access project models in my tasks.py #2613

lukeoiler opened this issue Jun 3, 2020 · 8 comments

Comments

@lukeoiler
Copy link

lukeoiler commented Jun 3, 2020

What happened?

I'm trying to have a celery task access my models.py to create an object, based on a result from a task chain.
No matter what I tried I always get the error message
ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
I'm also confused by the path /app/ -> Then all the proper path

Also the tasks in the tasks.py file get recognized just fine.

What should've happened instead?

The model should load fine.

Steps to reproduce

I used the docker configuration without much changes. I only use a personal postgres and not a container, but I've not ran into issues with that so far. I needed that initially to easier test outside access. This is what I'm trying to change now, since I want to create model instances from django and not via sql from an outside script.
//: # (* Host system configuration: OS, Docker & friends' versions etc.)
DigitalOcean Ubuntu running Docker
//: # (* Logs)
error.txt

UPDATE extracted logs in here
django_1        | Traceback (most recent call last):
django_1        |   File "manage.py", line 31, in 
django_1        |     execute_from_command_line(sys.argv)
django_1        |   File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
django_1        |     utility.execute()
django_1        |   File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 377, in execute
django_1        |     django.setup()
django_1        |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
django_1        |     apps.populate(settings.INSTALLED_APPS)
django_1        |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
django_1        |     app_config.import_models()
django_1        |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
django_1        |     self.models_module = import_module(models_module_name)
django_1        |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
django_1        |     return _bootstrap._gcd_import(name[level:], package, level)
django_1        |   File "", line 1006, in _gcd_import
django_1        |   File "", line 983, in _find_and_load
django_1        |   File "", line 967, in _find_and_load_unlocked
django_1        |   File "", line 677, in _load_unlocked
django_1        |   File "", line 728, in exec_module
django_1        |   File "", line 219, in _call_with_frames_removed
django_1        |   File "/app/simpledash/projects/models.py", line 8, in 
django_1        |     from simpledash.projects.tasks import start_crawl
django_1        |   File "/app/simpledash/projects/tasks.py", line 4, in 
django_1        |     from simpledash.projects.models import CrawlURL
django_1        | ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
simpledash_django_1 exited with code 1
celerybeat_1    | ERROR 2020-06-03 13:54:51,424 signal 8 140043661473600 Signal handler > raised: ImportError("cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)")
celerybeat_1    | Traceback (most recent call last):
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
celerybeat_1    |     response = receiver(signal=self, sender=sender, **named)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 84, in on_import_modules
celerybeat_1    |     self.worker_fixup.validate_models()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 122, in validate_models
celerybeat_1    |     self.django_setup()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 118, in django_setup
celerybeat_1    |     django.setup()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
celerybeat_1    |     apps.populate(settings.INSTALLED_APPS)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
celerybeat_1    |     app_config.import_models()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
celerybeat_1    |     self.models_module = import_module(models_module_name)
celerybeat_1    |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
celerybeat_1    |     return _bootstrap._gcd_import(name[level:], package, level)
celerybeat_1    |   File "", line 1006, in _gcd_import
celerybeat_1    |   File "", line 983, in _find_and_load
celerybeat_1    |   File "", line 967, in _find_and_load_unlocked
celerybeat_1    |   File "", line 677, in _load_unlocked
celerybeat_1    |   File "", line 728, in exec_module
celerybeat_1    |   File "", line 219, in _call_with_frames_removed
celerybeat_1    |   File "/app/simpledash/projects/models.py", line 8, in 
celerybeat_1    |     from simpledash.projects.tasks import start_crawl
celerybeat_1    |   File "/app/simpledash/projects/tasks.py", line 4, in 
celerybeat_1    |     from simpledash.projects.models import CrawlURL
celerybeat_1    | ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
celerybeat_1    | Traceback (most recent call last):
celerybeat_1    |   File "/usr/local/bin/celery", line 8, in 
celerybeat_1    |     sys.exit(main())
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/__main__.py", line 16, in main
celerybeat_1    |     _main()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 322, in main
celerybeat_1    |     cmd.execute_from_commandline(argv)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 495, in execute_from_commandline
celerybeat_1    |     super(CeleryCommand, self).execute_from_commandline(argv)))
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 305, in execute_from_commandline
celerybeat_1    |     return self.handle_argv(self.prog_name, argv[1:])
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 487, in handle_argv
celerybeat_1    |     return self.execute(command, argv)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 419, in execute
celerybeat_1    |     ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 309, in run_from_argv
celerybeat_1    |     sys.argv if argv is None else argv, command)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 393, in handle_argv
celerybeat_1    |     return self(*args, **options)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 253, in __call__
celerybeat_1    |     ret = self.run(*args, **kwargs)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/bin/beat.py", line 109, in run
celerybeat_1    |     return beat().run()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/apps/beat.py", line 79, in run
celerybeat_1    |     self.init_loader()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/apps/beat.py", line 128, in init_loader
celerybeat_1    |     self.app.loader.init_worker()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/loaders/base.py", line 114, in init_worker
celerybeat_1    |     self.import_default_modules()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/loaders/base.py", line 108, in import_default_modules
celerybeat_1    |     raise response
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
celerybeat_1    |     response = receiver(signal=self, sender=sender, **named)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 84, in on_import_modules
celerybeat_1    |     self.worker_fixup.validate_models()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 122, in validate_models
celerybeat_1    |     self.django_setup()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 118, in django_setup
celerybeat_1    |     django.setup()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
celerybeat_1    |     apps.populate(settings.INSTALLED_APPS)
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
celerybeat_1    |     app_config.import_models()
celerybeat_1    |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
celerybeat_1    |     self.models_module = import_module(models_module_name)
celerybeat_1    |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
celerybeat_1    |     return _bootstrap._gcd_import(name[level:], package, level)
celerybeat_1    |   File "", line 1006, in _gcd_import
celerybeat_1    |   File "", line 983, in _find_and_load
celerybeat_1    |   File "", line 967, in _find_and_load_unlocked
celerybeat_1    |   File "", line 677, in _load_unlocked
celerybeat_1    |   File "", line 728, in exec_module
celerybeat_1    |   File "", line 219, in _call_with_frames_removed
celerybeat_1    |   File "/app/simpledash/projects/models.py", line 8, in 
celerybeat_1    |     from simpledash.projects.tasks import start_crawl
celerybeat_1    |   File "/app/simpledash/projects/tasks.py", line 4, in 
celerybeat_1    |     from simpledash.projects.models import CrawlURL
celerybeat_1    | ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
flower_1        | ERROR 2020-06-03 13:54:51,688 signal 7 139998308116288 Signal handler > raised: ImportError("cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)")
flower_1        | Traceback (most recent call last):
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
flower_1        |     response = receiver(signal=self, sender=sender, **named)
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 84, in on_import_modules
flower_1        |     self.worker_fixup.validate_models()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 122, in validate_models
flower_1        |     self.django_setup()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 118, in django_setup
flower_1        |     django.setup()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
flower_1        |     apps.populate(settings.INSTALLED_APPS)
flower_1        |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
flower_1        |     app_config.import_models()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
flower_1        |     self.models_module = import_module(models_module_name)
flower_1        |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
flower_1        |     return _bootstrap._gcd_import(name[level:], package, level)
flower_1        |   File "", line 1006, in _gcd_import
flower_1        |   File "", line 983, in _find_and_load
flower_1        |   File "", line 967, in _find_and_load_unlocked
flower_1        |   File "", line 677, in _load_unlocked
flower_1        |   File "", line 728, in exec_module
flower_1        |   File "", line 219, in _call_with_frames_removed
flower_1        |   File "/app/simpledash/projects/models.py", line 8, in 
flower_1        |     from simpledash.projects.tasks import start_crawl
flower_1        |   File "/app/simpledash/projects/tasks.py", line 4, in 
flower_1        |     from simpledash.projects.models import CrawlURL
flower_1        | ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
flower_1        | Traceback (most recent call last):
flower_1        |   File "/usr/local/bin/celery", line 8, in 
flower_1        |     sys.exit(main())
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/__main__.py", line 16, in main
flower_1        |     _main()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 322, in main
flower_1        |     cmd.execute_from_commandline(argv)
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 495, in execute_from_commandline
flower_1        |     super(CeleryCommand, self).execute_from_commandline(argv)))
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 305, in execute_from_commandline
flower_1        |     return self.handle_argv(self.prog_name, argv[1:])
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 487, in handle_argv
flower_1        |     return self.execute(command, argv)
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 419, in execute
flower_1        |     ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
flower_1        |   File "/usr/local/lib/python3.7/site-packages/flower/command.py", line 39, in run_from_argv
flower_1        |     self.app.loader.import_default_modules()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/loaders/base.py", line 108, in import_default_modules
flower_1        |     raise response
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
flower_1        |     response = receiver(signal=self, sender=sender, **named)
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 84, in on_import_modules
flower_1        |     self.worker_fixup.validate_models()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 122, in validate_models
flower_1        |     self.django_setup()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 118, in django_setup
flower_1        |     django.setup()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
flower_1        |     apps.populate(settings.INSTALLED_APPS)
flower_1        |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
flower_1        |     app_config.import_models()
flower_1        |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
flower_1        |     self.models_module = import_module(models_module_name)
flower_1        |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
flower_1        |     return _bootstrap._gcd_import(name[level:], package, level)
flower_1        |   File "", line 1006, in _gcd_import
flower_1        |   File "", line 983, in _find_and_load
flower_1        |   File "", line 967, in _find_and_load_unlocked
flower_1        |   File "", line 677, in _load_unlocked
flower_1        |   File "", line 728, in exec_module
flower_1        |   File "", line 219, in _call_with_frames_removed
flower_1        |   File "/app/simpledash/projects/models.py", line 8, in 
flower_1        |     from simpledash.projects.tasks import start_crawl
flower_1        |   File "/app/simpledash/projects/tasks.py", line 4, in 
flower_1        |     from simpledash.projects.models import CrawlURL
flower_1        | ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
celeryworker_1  | ERROR 2020-06-03 13:54:51,788 signal 7 140462855862080 Signal handler > raised: ImportError("cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)")
celeryworker_1  | Traceback (most recent call last):
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
celeryworker_1  |     response = receiver(signal=self, sender=sender, **named)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 84, in on_import_modules
celeryworker_1  |     self.worker_fixup.validate_models()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 122, in validate_models
celeryworker_1  |     self.django_setup()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 118, in django_setup
celeryworker_1  |     django.setup()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
celeryworker_1  |     apps.populate(settings.INSTALLED_APPS)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
celeryworker_1  |     app_config.import_models()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
celeryworker_1  |     self.models_module = import_module(models_module_name)
celeryworker_1  |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
celeryworker_1  |     return _bootstrap._gcd_import(name[level:], package, level)
celeryworker_1  |   File "", line 1006, in _gcd_import
celeryworker_1  |   File "", line 983, in _find_and_load
celeryworker_1  |   File "", line 967, in _find_and_load_unlocked
celeryworker_1  |   File "", line 677, in _load_unlocked
celeryworker_1  |   File "", line 728, in exec_module
celeryworker_1  |   File "", line 219, in _call_with_frames_removed
celeryworker_1  |   File "/app/simpledash/projects/models.py", line 8, in 
celeryworker_1  |     from simpledash.projects.tasks import start_crawl
celeryworker_1  |   File "/app/simpledash/projects/tasks.py", line 4, in 
celeryworker_1  |     from simpledash.projects.models import CrawlURL
celeryworker_1  | ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
celeryworker_1  | Traceback (most recent call last):
celeryworker_1  |   File "/usr/local/bin/celery", line 8, in 
celeryworker_1  |     sys.exit(main())
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/__main__.py", line 16, in main
celeryworker_1  |     _main()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 322, in main
celeryworker_1  |     cmd.execute_from_commandline(argv)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 495, in execute_from_commandline
celeryworker_1  |     super(CeleryCommand, self).execute_from_commandline(argv)))
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 305, in execute_from_commandline
celeryworker_1  |     return self.handle_argv(self.prog_name, argv[1:])
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 487, in handle_argv
celeryworker_1  |     return self.execute(command, argv)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 419, in execute
celeryworker_1  |     ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/worker.py", line 223, in run_from_argv
celeryworker_1  |     return self(*args, **options)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 253, in __call__
celeryworker_1  |     ret = self.run(*args, **kwargs)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/bin/worker.py", line 258, in run
celeryworker_1  |     **kwargs)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/worker/worker.py", line 96, in __init__
celeryworker_1  |     self.app.loader.init_worker()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/loaders/base.py", line 114, in init_worker
celeryworker_1  |     self.import_default_modules()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/loaders/base.py", line 108, in import_default_modules
celeryworker_1  |     raise response
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/utils/dispatch/signal.py", line 288, in send
celeryworker_1  |     response = receiver(signal=self, sender=sender, **named)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 84, in on_import_modules
celeryworker_1  |     self.worker_fixup.validate_models()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 122, in validate_models
celeryworker_1  |     self.django_setup()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/celery/fixups/django.py", line 118, in django_setup
celeryworker_1  |     django.setup()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/django/__init__.py", line 24, in setup
celeryworker_1  |     apps.populate(settings.INSTALLED_APPS)
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/django/apps/registry.py", line 114, in populate
celeryworker_1  |     app_config.import_models()
celeryworker_1  |   File "/usr/local/lib/python3.7/site-packages/django/apps/config.py", line 211, in import_models
celeryworker_1  |     self.models_module = import_module(models_module_name)
celeryworker_1  |   File "/usr/local/lib/python3.7/importlib/__init__.py", line 127, in import_module
celeryworker_1  |     return _bootstrap._gcd_import(name[level:], package, level)
celeryworker_1  |   File "", line 1006, in _gcd_import
celeryworker_1  |   File "", line 983, in _find_and_load
celeryworker_1  |   File "", line 967, in _find_and_load_unlocked
celeryworker_1  |   File "", line 677, in _load_unlocked
celeryworker_1  |   File "", line 728, in exec_module
celeryworker_1  |   File "", line 219, in _call_with_frames_removed
celeryworker_1  |   File "/app/simpledash/projects/models.py", line 8, in 
celeryworker_1  |     from simpledash.projects.tasks import start_crawl
celeryworker_1  |   File "/app/simpledash/projects/tasks.py", line 4, in 
celeryworker_1  |     from simpledash.projects.models import CrawlURL
celeryworker_1  | ImportError: cannot import name 'CrawlURL' from 'simpledash.projects.models' (/app/simpledash/projects/models.py)
simpledash_celerybeat_1 exited with code 1
simpledash_celeryworker_1 exited with code 1
simpledash_flower_1 exited with code 1
@lukeoiler
Copy link
Author

lukeoiler commented Jun 4, 2020

As a sidenote -> When I transfer everything to the tasks.py in the users app then it works. It must have something to do with the other generated django app. But obviously this screws my internal logic quite a bit.

@foarsitter
Copy link
Collaborator

foarsitter commented Jun 4, 2020

Doe you import the task in models.py? It looks like a circular dependency:

django_1        |   File "/app/simpledash/projects/models.py", line 8, in <module>
django_1        |     from simpledash.projects.tasks import start_crawl
django_1        |   File "/app/simpledash/projects/tasks.py", line 4, in <module>
django_1        |     from simpledash.projects.models import CrawlURL

-> models.py
-> from simpledash.projects.tasks import start_crawl
-> tasks.py
-> from simpledash.projects.models import CrawlURL

@lukeoiler
Copy link
Author

Doe you import the task in models.py? It looks like a circular dependency:

django_1        |   File "/app/simpledash/projects/models.py", line 8, in <module>
django_1        |     from simpledash.projects.tasks import start_crawl
django_1        |   File "/app/simpledash/projects/tasks.py", line 4, in <module>
django_1        |     from simpledash.projects.models import CrawlURL

-> models.py
-> from simpledash.projects.tasks import start_crawl
-> tasks.py
-> from simpledash.projects.models import CrawlURL

Hi, unfortunately, that is not the case.

These are the imports in my projects.models.py:

import uuid

from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.urls import reverse

from simpledash.users.models import User

# 3rd-Party App Imports
from imagekit.models import ImageSpecField
from imagekit.processors import ResizeToFit

I do want to change the user import to get user model, but I don't image that will cause this issue.

@foarsitter
Copy link
Collaborator

Where do you import this line then: from simpledash.projects.tasks import start_crawl? And be aware that there is no hot reloading of Celery.

@lukeoiler
Copy link
Author

lukeoiler commented Jun 4, 2020

I import that in the projects.signals.py file and in the projects.views.py file - although in the view that is still from an older version and is not used anymore

And yes, I'm aware of that, but thank you. I learned while coding this actually, because I was wondering at an early stage why the task didn't update, ever since then I knew to restart the containers. Since I'm still developing it's quick to just compose down and up again.

@foarsitter
Copy link
Collaborator

Last guess: projects.signals is imported in users.models.py? To help you any further you need to post more information.

@reyesvicente
Copy link
Contributor

reyesvicente commented Jun 15, 2020

When importing with cookiecutter-django, you have to start from the project name, then the project app, then the file:

from <project_name>.<project_app>.<file.py> import *

I hope this helps

@browniebroke
Copy link
Member

I really think this is it:

Do you import the task in models.py? It looks like a circular dependency

The stack trace points at:

  • Line 8 of simpledash/projects/models.py tries to import from tasks.py
    and
  • Line 4 of simpledash/projects/tasks.py tries to import from models.py

Sorry if this feel like repeating what the other said earlier, but the files inside your running container might be different than the one in your local file system (especially in prod). Do you have such imports at the exact lines from the exception? If not that might be your issue.

To get changes propagated in the container, make sure to:

  1. stop any running container
  2. rebuild the docker image
  3. start the container again

And just to be clear on the circular import issue, usually one resolve this by either:

  • importing locally the model n the body of the task
  • importing locally the task in the body of a method where you use it.

I'll close this for now. It doesn't look like an issue with the project at this point.

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants