mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
importing netbox.navigation.menu disables all plugin menus #9995
Closed
opened 2025-12-29 21:25:23 +01:00 by adam
·
11 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#9995
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Kek5chen on GitHub (Jul 18, 2024).
Deployment Type
Self-hosted
NetBox Version
v4.0.7
Python Version
3.11
Steps to Reproduce
__init__.pyin the pluginsready()method), importfrom netbox.navigation.menu import MENUSor justimport netbox.navigation.menu(untested but should be same behavior)Expected Behavior
You can just import this module without side effects and for example, read the default menus from it.
Observed Behavior
Just importing this, will disable all plugin menus due to their respective initialization code being ran at the time of this import inside of this module.
@Kek5chen commented on GitHub (Jul 18, 2024):
I have a PR with the fix ready once this is triaged.
@arthanson commented on GitHub (Jul 22, 2024):
@Kek5chen I've assigned to you.
@jeremystretch commented on GitHub (Jul 26, 2024):
@Kek5chen why would you need to import this? The registration process for plugin menus does not require this.
@Kek5chen commented on GitHub (Jul 26, 2024):
It's pretty simple, when you want to check the Navigation Menu items, for whatever reason, even just as to read from them, you have to import from the menu.py file. When you import this in a plug-in, it will try to unasked and prematurely register the plug-in navigation menus, at a too early state and make them inaccessible later when they should actually load. It's an obvious behavioural bug. We have a use case where this is important for us, and we stumbled upon this, and would like it fixed officially. Many thanks in advance.
@Kek5chen commented on GitHub (Jul 26, 2024):
Even looking behind this use case, a plug-in should not be able to break the loading process of the whole environment with valid code.
@Kek5chen commented on GitHub (Jul 26, 2024):
The problem is also that it appears fine, until you see that all your custom plug-in menus and the plug-in button are missing even though the plug-ins tried to register them. All just because of this one import.
@jeremystretch commented on GitHub (Jul 26, 2024):
For what reason, specifically?
@Kek5chen commented on GitHub (Jul 26, 2024):
We have an internal plug-in that parses the menu, its links and grouping into our own internal data structure on plug-in ready.
This has to be done on ready as some data is mangled later due to the plug-in menus loading after ready and since we are only interested in the default, raw menu as it comes boxed with the specific netbox version that is currently latest stable. These parsed entries we use, so that we can then, in our own normal vanilla plug-in menu (created through the usual process) make references to these pages and urls as well as export these links to outside sources, as for example top desk, MS Teams and so on.
We also add our own query parameters to these links and mangle them ourselves, so it's important. We also internally group some things, where we put these links, after the NetBox layout in the same manner and the menu changing without our plug-in would lead to many, many dead / invalid links hovering around. (Though I have to say the grouping is unnecessary, but one of our team leads is stone set on this approach..)
We've been using NetBox for so long that we've adapted processes to be ready for changes in the navigation menu, and their links and grouping. We use these for monitoring and alerting but up until now we could only read from these menus through obscure ways of not importing the menu file (as this issue covers why that is a problem), but using a parser and basically forcing these entries out, having to worry about in no way, ever, importing this one specific file as to the plug-in menu load on import. It would end up breaking a LOT of our other plug-in registrations that will stop showing up without this fix.
This here fix would stabilise this part of our pipeline significantly and also make the internal plug-in code much more clean and readable as we go from a few thousand lines to just around 1-2 hundred. Though we're trying to slowly merge all our internal patches that we are working on, so that we might be able to run a vanilla release with our plug-ins at some point, as long as there are no updates enabling some of these features or us revisiting these patches and finding a better way of implementation.
We also just try to push those patches that we deem might benefit others. And this is most likely one of them.
Sorry if this is a little crazy, but what can you do. Again, we'd be grateful if you could merge this since it'd save some engineers some hours and probably a lot of future maintenance.
Best regards
@jeremystretch commented on GitHub (Jul 29, 2024):
I'm sorry but what you're attempting to do is not supported functionality. It's simply not a design goal of the dynamic navigation system. You'll need to modify your code to import the menu code only after the application has been fully initialized. Django's
AppConfig.ready()method may be helpful in this regard.@Kek5chen commented on GitHub (Jul 29, 2024):
If you would've attentively read my explanation, then you would've noticed that this is not an option, because plug-in menus and their deluded actions are going to mess with the navigation menu to produce a non-default state.
I don't understand why this is not a fix you can just merge, as it even was previously accepted and triaged by one of your senior developers.
This is a bug fix for something that shouldn't be a bug in the first place!
I don't know why your lack of allowance of good things in your own world has to affect us and others.
Just because our use case is not supported, doesn't mean it's invalid, or that importing this file for whatever other reason doesn't have its validity!
Neither did you give me any hints as how to improve this PR to make it fit more into the NetBox ideology, nor did you even try to understand our case.
This is simply unacceptable for FOSS.
You are a very closeted man, Jeremy, and it's no wonder that people are frustrated by NetBox and the team behind it.
@jeremystretch commented on GitHub (Jul 29, 2024):
You're certainly entitled to your opinion, but my decision stands for the reason cited. Of course, you're always free to fork the NetBox code and make whatever changes you like. Best of luck.