strawberry-graphql-django v0.61.0 raises an ImportError exception #11324

Closed
opened 2025-12-29 21:43:39 +01:00 by adam · 2 comments
Owner

Originally created by @jeremystretch on GitHub (Jun 26, 2025).

Proposed Changes

When upgrading to strawberry-graphql-django v0.61.0 or later, an ImportError exception is raised on initialization, potentially indicating a circular import (though I'm not sure how).

Traceback (most recent call last):
  File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.10/threading.py", line 953, in run
    self._target(*self._args, **self._kwargs)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper
    fn(*args, **kwargs)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 134, in inner_run
    self.check(**check_kwargs)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/management/base.py", line 492, in check
    all_issues = checks.run_checks(
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/checks/registry.py", line 89, in run_checks
    new_errors = check(app_configs=app_configs, databases=databases)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/checks/urls.py", line 16, in check_url_config
    return check_resolver(resolver)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/checks/urls.py", line 26, in check_resolver
    return check_method()
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 531, in check
    for pattern in self.url_patterns:
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 718, in url_patterns
    patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__
    res = instance.__dict__[self.name] = self.func(instance)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 711, in urlconf_module
    return import_module(self.urlconf_name)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/home/jstretch/projects/netbox/netbox/netbox/urls.py", line 9, in <module>
    from netbox.graphql.schema import schema
  File "/home/jstretch/projects/netbox/netbox/netbox/graphql/schema.py", line 7, in <module>
    from circuits.graphql.schema import CircuitsQuery
  File "/home/jstretch/projects/netbox/netbox/circuits/graphql/schema.py", line 6, in <module>
    from .types import *
  File "/home/jstretch/projects/netbox/netbox/circuits/graphql/types.py", line 8, in <module>
    from extras.graphql.mixins import ContactsMixin, CustomFieldsMixin, TagsMixin
  File "/home/jstretch/projects/netbox/netbox/extras/graphql/mixins.py", line 37, in <module>
    class ImageAttachmentsMixin:
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/object_type.py", line 323, in type
    return wrap(cls)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/object_type.py", line 307, in wrap
    wrapped = _wrap_dataclass(cls)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/object_type.py", line 117, in _wrap_dataclass
    dclass = dataclasses.dataclass(cls, **dclass_kwargs)
  File "/usr/lib/python3.10/dataclasses.py", line 1184, in dataclass
    return wrap(cls)
  File "/usr/lib/python3.10/dataclasses.py", line 1175, in wrap
    return _process_class(cls, init, repr, eq, order, unsafe_hash,
  File "/usr/lib/python3.10/dataclasses.py", line 955, in _process_class
    cls_fields.append(_get_field(cls, name, type, kw_only))
  File "/usr/lib/python3.10/dataclasses.py", line 765, in _get_field
    or (isinstance(f.type, str)
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/field.py", line 304, in type
    return self.resolve_type()
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry_django/fields/base.py", line 194, in resolve_type
    resolved_django_type = get_django_definition(unwrap_type(resolved))
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry_django/utils/typing.py", line 133, in unwrap_type
    type_ = type_.resolve_type()
  File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/lazy_type.py", line 63, in resolve_type
    module = importlib.import_module(self.module, self.package)
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "/home/jstretch/projects/netbox/netbox/extras/graphql/types.py", line 7, in <module>
    from extras.graphql.mixins import CustomFieldsMixin, TagsMixin
ImportError: cannot import name 'TagsMixin' from partially initialized module 'extras.graphql.mixins' (most likely due to a circular import) (/home/jstretch/projects/netbox/netbox/extras/graphql/mixins.py)

The breaking change was introduced somewhere in here.

Justification

We need to investigate and resolve this issue to unblock newer releases of the library.

Originally created by @jeremystretch on GitHub (Jun 26, 2025). ### Proposed Changes When upgrading to `strawberry-graphql-django` v0.61.0 or later, an ImportError exception is raised on initialization, potentially indicating a circular import (though I'm not sure how). ``` Traceback (most recent call last): File "/usr/lib/python3.10/threading.py", line 1016, in _bootstrap_inner self.run() File "/usr/lib/python3.10/threading.py", line 953, in run self._target(*self._args, **self._kwargs) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/utils/autoreload.py", line 64, in wrapper fn(*args, **kwargs) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/management/commands/runserver.py", line 134, in inner_run self.check(**check_kwargs) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/management/base.py", line 492, in check all_issues = checks.run_checks( File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/checks/registry.py", line 89, in run_checks new_errors = check(app_configs=app_configs, databases=databases) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/checks/urls.py", line 16, in check_url_config return check_resolver(resolver) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/core/checks/urls.py", line 26, in check_resolver return check_method() File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 531, in check for pattern in self.url_patterns: File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 718, in url_patterns patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/utils/functional.py", line 47, in __get__ res = instance.__dict__[self.name] = self.func(instance) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/django/urls/resolvers.py", line 711, in urlconf_module return import_module(self.urlconf_name) File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "<frozen importlib._bootstrap>", line 1050, in _gcd_import File "<frozen importlib._bootstrap>", line 1027, in _find_and_load File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 688, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 883, in exec_module File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed File "/home/jstretch/projects/netbox/netbox/netbox/urls.py", line 9, in <module> from netbox.graphql.schema import schema File "/home/jstretch/projects/netbox/netbox/netbox/graphql/schema.py", line 7, in <module> from circuits.graphql.schema import CircuitsQuery File "/home/jstretch/projects/netbox/netbox/circuits/graphql/schema.py", line 6, in <module> from .types import * File "/home/jstretch/projects/netbox/netbox/circuits/graphql/types.py", line 8, in <module> from extras.graphql.mixins import ContactsMixin, CustomFieldsMixin, TagsMixin File "/home/jstretch/projects/netbox/netbox/extras/graphql/mixins.py", line 37, in <module> class ImageAttachmentsMixin: File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/object_type.py", line 323, in type return wrap(cls) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/object_type.py", line 307, in wrap wrapped = _wrap_dataclass(cls) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/object_type.py", line 117, in _wrap_dataclass dclass = dataclasses.dataclass(cls, **dclass_kwargs) File "/usr/lib/python3.10/dataclasses.py", line 1184, in dataclass return wrap(cls) File "/usr/lib/python3.10/dataclasses.py", line 1175, in wrap return _process_class(cls, init, repr, eq, order, unsafe_hash, File "/usr/lib/python3.10/dataclasses.py", line 955, in _process_class cls_fields.append(_get_field(cls, name, type, kw_only)) File "/usr/lib/python3.10/dataclasses.py", line 765, in _get_field or (isinstance(f.type, str) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/field.py", line 304, in type return self.resolve_type() File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry_django/fields/base.py", line 194, in resolve_type resolved_django_type = get_django_definition(unwrap_type(resolved)) File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry_django/utils/typing.py", line 133, in unwrap_type type_ = type_.resolve_type() File "/home/jstretch/projects/netbox/venv/lib/python3.10/site-packages/strawberry/types/lazy_type.py", line 63, in resolve_type module = importlib.import_module(self.module, self.package) File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module return _bootstrap._gcd_import(name[level:], package, level) File "/home/jstretch/projects/netbox/netbox/extras/graphql/types.py", line 7, in <module> from extras.graphql.mixins import CustomFieldsMixin, TagsMixin ImportError: cannot import name 'TagsMixin' from partially initialized module 'extras.graphql.mixins' (most likely due to a circular import) (/home/jstretch/projects/netbox/netbox/extras/graphql/mixins.py) ``` The breaking change was introduced [somewhere in here](https://github.com/strawberry-graphql/strawberry-django/compare/v0.60.0...v0.61.0). ### Justification We need to investigate and resolve this issue to unblock newer releases of the library.
adam added the type: housekeeping label 2025-12-29 21:43:39 +01:00
adam closed this issue 2025-12-29 21:43:39 +01:00
Author
Owner

@Sundsja commented on GitHub (Jul 18, 2025):

I got this error in our plugin project yesterday when running poetry run invoke migrate. We are on Netbox version 4.1.11. Everything has worked superbly before this. I do not understand how this bug appeared since we haven't changed anything in the past few months.

@Sundsja commented on GitHub (Jul 18, 2025): I got this error in our plugin project yesterday when running `poetry run invoke migrate`. We are on Netbox version 4.1.11. Everything has worked superbly before this. I do not understand how this bug appeared since we haven't changed anything in the past few months.
Author
Owner

@jeremystretch commented on GitHub (Jul 31, 2025):

This has been resolved by upgrading to strawberry-graphql-django v0.65.1 in NetBox v4.3.5.

@jeremystretch commented on GitHub (Jul 31, 2025): This has been resolved by upgrading to `strawberry-graphql-django` v0.65.1 in NetBox v4.3.5.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#11324