Error after editing a cable object #7238

Closed
opened 2025-12-29 20:20:45 +01:00 by adam · 3 comments
Owner

Originally created by @MrMoyaert on GitHub (Nov 16, 2022).

NetBox version

v3.3.7

Python version

3.8

Steps to Reproduce

  1. create a cable connection with 1 interface on side A and 2 interfaces on side B
  2. edit the cable object to only have 1 interface on side B

Expected Behavior

The cable object should have saved succesfully and have only 1 interface on side A and 1 on side B

Observed Behavior

Server Error
There was a problem with your request. Please contact an administrator.

The complete exception is provided below:

<class 'AssertionError'>

Python version: 3.8.10
NetBox version: 3.3.7

Originally created by @MrMoyaert on GitHub (Nov 16, 2022). ### NetBox version v3.3.7 ### Python version 3.8 ### Steps to Reproduce 1. create a cable connection with 1 interface on side A and 2 interfaces on side B 2. edit the cable object to only have 1 interface on side B ### Expected Behavior The cable object should have saved succesfully and have only 1 interface on side A and 1 on side B ### Observed Behavior Server Error There was a problem with your request. Please contact an administrator. The complete exception is provided below: <class 'AssertionError'> Python version: 3.8.10 NetBox version: 3.3.7
adam added the type: bugstatus: duplicate labels 2025-12-29 20:20:45 +01:00
adam closed this issue 2025-12-29 20:20:45 +01:00
Author
Owner

@jeremystretch commented on GitHub (Nov 16, 2022):

Thank you for opening a bug report. Unfortunately, the information you have provided is not sufficient for someone else to attempt to reproduce the reported behavior. Remember, each bug report must include detailed steps that someone else can follow on a clean, empty NetBox installation to reproduce the exact problem you're experiencing. These instructions should include the creation of any involved objects, any configuration changes, and complete accounting of the actions being taken. Also be sure that your report does not reference data on the public NetBox demo, as that is subject to change at any time by an outside party and cannot be relied upon for bug reports.

@jeremystretch commented on GitHub (Nov 16, 2022): Thank you for opening a bug report. Unfortunately, the information you have provided is not sufficient for someone else to attempt to reproduce the reported behavior. Remember, each bug report must include detailed steps that someone else can follow on a clean, empty NetBox installation to reproduce the exact problem you're experiencing. These instructions should include the creation of any involved objects, any configuration changes, and complete accounting of the actions being taken. Also be sure that your report does not reference data on the public NetBox demo, as that is subject to change at any time by an outside party and cannot be relied upon for bug reports.
Author
Owner

@kkthxbye-code commented on GitHub (Nov 24, 2022):

@jeremystretch - I managed to recreate this.

  • Create manufacturer testmanu
  • Create device role testrole
  • Create devicetype testdt with role testrole and manufacturer testmanu
  • Create device testdevice with devicetype testdt
  • Add three interfaces to testdevice inf-[1-3]
  • Create a cable from inf1 to inf2 and inf 3.
  • Edit the cable and remove inf2 from the b side.
AssertionError
Internal Server Error: /dcim/cables/6/edit/
Traceback (most recent call last):
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner
    response = get_response(request)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 84, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/dcim/views.py", line 2785, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 303, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/utilities/views.py", line 90, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 119, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 391, in post
    obj = form.save()
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/forms/models.py", line 548, in save
    self.instance.save()
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 193, in save
    ct.delete()
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 324, in delete
    super().delete(*args, **kwargs)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1094, in delete
    return collector.delete()
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/deletion.py", line 488, in delete
    signals.post_delete.send(
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 176, in send
    return [
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 177, in <listcomp>
    (receiver, receiver(signal=self, sender=sender, **named))
  File "/home/main/devel/repos/netbox/netbox/dcim/signals.py", line 127, in nullify_connected_endpoints
    cablepath.retrace()
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 612, in retrace
    _new = self.from_origin(self.origins)
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 470, in from_origin
    assert all(t.link == terminations[0].link for t in terminations[1:])
AssertionError

Something is wrong in the retracing code. I assume it's trying to retrace from and to the link that has just been removed, but I'm having a hard time grokking how it is supposed to work.

@kkthxbye-code commented on GitHub (Nov 24, 2022): @jeremystretch - I managed to recreate this. * Create manufacturer testmanu * Create device role testrole * Create devicetype testdt with role testrole and manufacturer testmanu * Create device testdevice with devicetype testdt * Add three interfaces to testdevice inf-[1-3] * Create a cable from inf1 to inf2 and inf 3. * Edit the cable and remove inf2 from the b side. ``` AssertionError Internal Server Error: /dcim/cables/6/edit/ Traceback (most recent call last): File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/core/handlers/exception.py", line 55, in inner response = get_response(request) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/core/handlers/base.py", line 197, in _get_response response = wrapped_callback(request, *callback_args, **callback_kwargs) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 84, in view return self.dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/dcim/views.py", line 2785, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 303, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/utilities/views.py", line 90, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/views/generic/base.py", line 119, in dispatch return handler(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 391, in post obj = form.save() File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/forms/models.py", line 548, in save self.instance.save() File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 193, in save ct.delete() File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 324, in delete super().delete(*args, **kwargs) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1094, in delete return collector.delete() File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/deletion.py", line 488, in delete signals.post_delete.send( File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 176, in send return [ File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/dispatch/dispatcher.py", line 177, in <listcomp> (receiver, receiver(signal=self, sender=sender, **named)) File "/home/main/devel/repos/netbox/netbox/dcim/signals.py", line 127, in nullify_connected_endpoints cablepath.retrace() File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 612, in retrace _new = self.from_origin(self.origins) File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 470, in from_origin assert all(t.link == terminations[0].link for t in terminations[1:]) AssertionError ``` Something is wrong in the retracing code. I assume it's trying to retrace from and to the link that has just been removed, but I'm having a hard time grokking how it is supposed to work.
Author
Owner

@jeremystretch commented on GitHub (Jan 6, 2023):

Looks like a duplicate of #10201

@jeremystretch commented on GitHub (Jan 6, 2023): Looks like a duplicate of #10201
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#7238