Skip to content

Can't reset object attribute to its initial value. #586

@endreszabo

Description

@endreszabo

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 makes pynetbox 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() to reload() 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    app: pynetboxseverity: lowDoes not significantly disrupt application functionality, or a workaround is availablestatus: needs ownerThis issue is tentatively accepted pending a volunteer committed to its implementationtype: bugA confirmed report of unexpected behavior in the application

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions