-
Notifications
You must be signed in to change notification settings - Fork 182
Open
Labels
app: pynetboxseverity: lowDoes not significantly disrupt application functionality, or a workaround is availableDoes not significantly disrupt application functionality, or a workaround is availablestatus: needs ownerThis issue is tentatively accepted pending a volunteer committed to its implementationThis issue is tentatively accepted pending a volunteer committed to its implementationtype: bugA confirmed report of unexpected behavior in the applicationA confirmed report of unexpected behavior in the application
Description
pynetbox version
v7.0.1
NetBox version
v3.6.1
Python version
3.11
Steps to Reproduce
Consider this simple modifying of a given attribute:
>>> import pynetbox
>>> nb=pynetbox.api('http://127.0.0.1:8000', 'yada')
>>> br_native = nb.dcim.interfaces.get(id=411)
>>> eth3 = nb.dcim.interfaces.get(id=415)
>>> eth3.bridge
br-native
>>> eth3.bridge = None
>>> eth3.save()
True
>>> eth3.bridge = br_native
>>> eth3.save()
False
#and, for added confusion, changing to another bridge works again.
>>> br_users = nb.dcim.interfaces.get(id=412)
>>> eth3.bridge = br_users
>>> eth3.save()
True
Expected Behavior
This happens because _diff()
in response.py
returns False
as the desired state matches its initial internal state, coming from the _init_cache
list.
We've been here many times. Yes, I know I should have called .full_details()
after the .save()
to have the attributes fetched and populated again. Yes, I know pynetbox is not an ORM and it just abstracts API calls, but let's be honest, this whole way of working is highly misleading, especially for newbies.
Observed Behavior
I propose to:
- mention this behavior in the documentation,
- or add
Api
an option that makespynetbox
reload the object once it was saved or updated, like this:nb=pynetbox.api('http://127.0.0.1:8000', 'yada', always_reload=True)
- or rename/alias this
full_details()
toreload()
or something else that makes more sense - or have the
Record
update its own_init_cache
. I know this is hard/impossible without getting back the object from NetBox and doing so would incur performance penalties; hence, I don't recommend it to be enabled by default.
adzhurinskij, volans-, XioNoX and joachimBurket
Metadata
Metadata
Assignees
Labels
app: pynetboxseverity: lowDoes not significantly disrupt application functionality, or a workaround is availableDoes not significantly disrupt application functionality, or a workaround is availablestatus: needs ownerThis issue is tentatively accepted pending a volunteer committed to its implementationThis issue is tentatively accepted pending a volunteer committed to its implementationtype: bugA confirmed report of unexpected behavior in the applicationA confirmed report of unexpected behavior in the application