Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

importlib-resources version 6.0.0 #72

Open
gurretp opened this issue Jul 12, 2023 · 9 comments
Open

importlib-resources version 6.0.0 #72

gurretp opened this issue Jul 12, 2023 · 9 comments

Comments

@gurretp
Copy link

gurretp commented Jul 12, 2023

The new version of importlib-resources is not compatible with the plugin

step to reproduce:
1 install netbox and netbox-plugin-auth-saml2
2 pip install importlib-resources==6.0.0
3 run netbox manage script : ./manage.py migrate --noinput

the same configuration works fine with importlib-resources version 5.13.0

Expected Behavior
~/releases/netbox-3.5.6/netbox > ./manage.py migrate --noinput
Operations to perform:
Apply all migrations: admin, auth, circuits, contenttypes, core, dcim, django_rq, extras, ipam, sessions, social_django, taggit, tenancy, users, virtualization, wireless
Running migrations:
No migrations to apply.

Observed Behavior

~/releases/netbox-3.5.6/netbox > ./manage.py migrate --noinput
Traceback (most recent call last):
File "./manage.py", line 10, in
execute_from_command_line(sys.argv)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/management/init.py", line 446, in execute_from_command_line
utility.execute()
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/management/init.py", line 440, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/management/base.py", line 402, in run_from_argv
self.execute(*args, **cmd_options)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/management/base.py", line 448, in execute
output = self.handle(*args, **options)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/management/base.py", line 96, in wrapped
res = handle_func(*args, **kwargs)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/management/commands/migrate.py", line 97, in handle
self.check(databases=[database])
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/management/base.py", line 475, in check
all_issues = checks.run_checks(
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/checks/registry.py", line 88, in run_checks
new_errors = check(app_configs=app_configs, databases=databases)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/checks/urls.py", line 14, in check_url_config
return check_resolver(resolver)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/core/checks/urls.py", line 24, in check_resolver
return check_method()
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/urls/resolvers.py", line 494, in check
for pattern in self.url_patterns:
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/utils/functional.py", line 57, in get
res = instance.dict[self.name] = self.func(instance)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/urls/resolvers.py", line 715, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/utils/functional.py", line 57, in get
res = instance.dict[self.name] = self.func(instance)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/urls/resolvers.py", line 708, in urlconf_module
return import_module(self.urlconf_name)
File "/usr/lib64/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1014, in _gcd_import
File "", line 991, in _find_and_load
File "", line 975, in _find_and_load_unlocked
File "", line 671, in _load_unlocked
File "", line 843, in exec_module
File "", line 219, in _call_with_frames_removed
File "/srv/netbox/releases/netbox-3.5.6/netbox/netbox/urls.py", line 8, in
from extras.plugins.urls import plugin_admin_patterns, plugin_patterns, plugin_api_patterns
File "/srv/netbox/releases/netbox-3.5.6/netbox/extras/plugins/urls.py", line 38, in
urlpatterns = import_string(f"{plugin_path}.api.urls.urlpatterns")
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/utils/module_loading.py", line 30, in import_string
return cached_import(module_path, class_name)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/utils/module_loading.py", line 15, in cached_import
module = import_module(module_path)
File "/usr/lib64/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django3_saml2_nbplugin/api/urls.py", line 5, in
path('', include('django3_auth_saml2.urls', namespace='django3_auth_saml2')),
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django/urls/conf.py", line 38, in include
urlconf_module = import_module(urlconf_module)
File "/usr/lib64/python3.8/importlib/init.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django3_auth_saml2/urls.py", line 3, in
from . import views
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/django3_auth_saml2/views.py", line 20, in
from saml2 import (
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/saml2/entity.py", line 10, in
from saml2.metadata import ENDPOINTS
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/saml2/metadata.py", line 2, in
from saml2.algsupport import algorithm_support_in_metadata
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/saml2/algsupport.py", line 2, in
from saml2.sigver import get_xmlsec_binary
File "/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/saml2/sigver.py", line 16, in
from importlib_resources import path as _resource_path
ImportError: cannot import name 'path' from 'importlib_resources' (/srv/netbox/current/venv-py3/lib64/python3.8/site-packages/importlib_resources/init.py)

@MichalMMac
Copy link

MichalMMac commented Jul 17, 2023

I experience the same problem. The import error is happening in pysaml2 library used by django3_auth_saml2 There is an issue for it: IdentityPython/pysaml2#917. path function was clearly removed from importlib_resources v6.0

The workaround mentioned in the linked issue works for me. I put importlib-resources==5.13.0 into my plugin_requirements.txt (for now).

@PieterL75
Copy link

I guess you meant to put importlib-resources==5.13.0 in the local_requirements.txt of /opt/netbox
Make sure it is before the django3-auth-saml2 and netbox-plugin-auth-saml2 lines

@MichalMMac
Copy link

MichalMMac commented Jul 18, 2023

@PieterL75 You are correct about the order of configurations lines. I probably chose a different filename to use in Dockerfile-Plugins.

@MichalMMac
Copy link

Up-to-date version of pysaml2 library does not suffer from this problem. The culprit is django3-auth-saml2 defining an explicit version requirement for pysaml2.

@MichalMMac
Copy link

And there is actually a PR for this jeremyschulman/django3-auth-saml2#17

@jeremyschulman
Copy link
Owner

@MichalMMac, all - Thank you. I will update the other package today. I appreciate the heads up and your patience.

@OliElli
Copy link

OliElli commented Aug 2, 2023

Just hit this but thankfully the workaround works. Are you able to create a new release tag to include the fix?

@jeremyschulman
Copy link
Owner

@OliElli - are you referring to this release that was tagged v0.6.1?
https://github.com/jeremyschulman/django3-auth-saml2/releases/tag/v0.6.1

@OliElli
Copy link

OliElli commented Aug 3, 2023

Ah no, I was expecting a bump in the release tag for this project, should I instead separately tag the version of django-auth-saml2?

Oops misunderstood, I'm already pinning this version so I'll update it. Thanks!

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

No branches or pull requests

5 participants