Skip to content

The "optional dependencies" are not actually optional. #201

@sergei-maertens

Description

@sergei-maertens

Product versie / Product version

0.13.2

Omschrijf het probleem / Describe the bug

Installing open-api-framework without the cors optional dependency group doesn't actually work, because the base settings module imports from it:

Traceback
(woo-publications) ➜  woo-publications git:(chore/upgrade-dependencies) ✗ m check
Traceback (most recent call last):
  File "/home/bbt/code/gpp-woo/woo-publications/src/manage.py", line 17, in <module>
    execute_from_command_line(sys.argv)
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/core/management/__init__.py", line 442, in execute_from_command_line
    utility.execute()
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/core/management/__init__.py", line 436, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/core/management/base.py", line 412, in run_from_argv
    parser = self.create_parser(argv[0], argv[1])
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/core/management/base.py", line 375, in create_parser
    self.add_arguments(parser)
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/core/management/commands/check.py", line 47, in add_arguments
    choices=tuple(connections),
            ^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/utils/connection.py", line 73, in __iter__
    return iter(self.settings)
                ^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/utils/functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
                                         ^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/utils/connection.py", line 45, in settings
    self._settings = self.configure_settings(self._settings)
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/db/utils.py", line 148, in configure_settings
    databases = super().configure_settings(databases)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/utils/connection.py", line 50, in configure_settings
    settings = getattr(django_settings, self.settings_name)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/conf/__init__.py", line 81, in __getattr__
    self._setup(name)
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/conf/__init__.py", line 68, in _setup
    self._wrapped = Settings(settings_module)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/django/conf/__init__.py", line 166, in __init__
    mod = importlib.import_module(self.SETTINGS_MODULE)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 999, in exec_module
  File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
  File "/home/bbt/code/gpp-woo/woo-publications/src/woo_publications/conf/dev.py", line 28, in <module>
    from .base import *  # noqa isort:skip
    ^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/code/gpp-woo/woo-publications/src/woo_publications/conf/base.py", line 7, in <module>
    from open_api_framework.conf.base import *  # noqa
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/bbt/.virtualenvs/woo-publications/lib/python3.12/site-packages/open_api_framework/conf/base.py", line 9, in <module>
    from corsheaders.defaults import default_headers as default_cors_headers
ModuleNotFoundError: No module named 'corsheaders'

This applies for:

  • django-cors-headers
  • django-csp
  • notifications-api-common
  • django-markup
  • django-redis

Stappen om te reproduceren / Steps to reproduce

  1. Add open-api-framework to requirements, without optional dependency groups
  2. In base settings, use the library base settings: from open_api_framework.conf.base import * # noqa
  3. Run a management command and observe crash

Verwacht gedrag / Expected behavior

No crash.

Metadata

Metadata

Assignees

Labels

Type

Projects

Status

Done

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions