Skip to content

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

@jeremystretch

Description

@jeremystretch

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    type: housekeepingChanges to the application which do not directly impact the end user

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions