-
Notifications
You must be signed in to change notification settings - Fork 187
Labels
app: pynetboxseverity: lowDoes not significantly disrupt application functionality, or a workaround is availableDoes not significantly disrupt application functionality, or a workaround is availablestatus: acceptedThis issue has been accepted for implementationThis issue has been accepted for 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()
TrueExpected 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
Apian option that makespynetboxreload 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
Recordupdate 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.
dzhurinskij, 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: acceptedThis issue has been accepted for implementationThis issue has been accepted for implementationtype: bugA confirmed report of unexpected behavior in the applicationA confirmed report of unexpected behavior in the application