AttributeError raised when deleting a CircuitTermination with attached cable -> interface #7467

Closed
opened 2025-12-29 20:23:44 +01:00 by adam · 1 comment
Owner

Originally created by @kkthxbye-code on GitHub (Jan 6, 2023).

Originally assigned to: @arthanson on GitHub.

NetBox version

v3.4.2

Python version

3.10

Steps to Reproduce

  1. Create a Site testsite
  2. Create a manufacturer testmanu
  3. Create a device role testrole
  4. Create a device type testdevicetype
  5. Create a device testdevice with the above pre-requisites
  6. Create two interfaces inf[1-2] of any physical type
  7. Create a Provider testprovider
  8. Create a CircuitType testcircuittype
  9. Create a Circuit testcircuit wit the above requisites
  10. Create two CircuitTermination (A & Z) to site testsite on the circuit
  11. Connect end A to inf1
  12. Connect end Z to inf2
  13. Press the delete button next to the swap button on CircuitTermination A
  14. Press delete

Expected Behavior

Circuit termination is deleted

Observed Behavior

The following exception is thrown:

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 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/utilities/views.py", line 99, 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 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 366, in post
    obj.delete()
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1118, in delete
    return collector.delete()
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/deletion.py", line 493, 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/circuits/signals.py", line 27, in rebuild_cablepaths
    rebuild_paths([peer_termination])
  File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 60, in rebuild_paths
    create_cablepath(cp.origins)
  File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 43, in create_cablepath
    cp = CablePath.from_origin(terminations)
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 529, in from_origin
    path.append([
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 530, in <listcomp>
    object_to_path_node(t) for t in remote_terminations
  File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 21, in object_to_path_node
    ct = ContentType.objects.get_for_model(obj)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 41, in get_for_model
    opts = self._get_opts(model, for_concrete_model)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 28, in _get_opts
    model = model._meta.concrete_model
AttributeError: 'NoneType' object has no attribute '_meta'
Internal Server Error: /circuits/circuit-terminations/57/delete/
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 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/utilities/views.py", line 99, 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 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 366, in post
    obj.delete()
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1118, in delete
    return collector.delete()
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/deletion.py", line 493, 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/circuits/signals.py", line 27, in rebuild_cablepaths
    rebuild_paths([peer_termination])
  File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 60, in rebuild_paths
    create_cablepath(cp.origins)
  File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 43, in create_cablepath
    cp = CablePath.from_origin(terminations)
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 529, in from_origin
    path.append([
  File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 530, in <listcomp>
    object_to_path_node(t) for t in remote_terminations
  File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 21, in object_to_path_node
    ct = ContentType.objects.get_for_model(obj)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 41, in get_for_model
    opts = self._get_opts(model, for_concrete_model)
  File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 28, in _get_opts
    model = model._meta.concrete_model
AttributeError: 'NoneType' object has no attribute '_meta'
Originally created by @kkthxbye-code on GitHub (Jan 6, 2023). Originally assigned to: @arthanson on GitHub. ### NetBox version v3.4.2 ### Python version 3.10 ### Steps to Reproduce 1. Create a Site `testsite` 1. Create a manufacturer `testmanu` 2. Create a device role `testrole` 3. Create a device type `testdevicetype` 4. Create a device `testdevice` with the above pre-requisites 5. Create two interfaces `inf[1-2]` of any physical type 6. Create a Provider `testprovider` 7. Create a CircuitType `testcircuittype` 8. Create a Circuit `testcircuit` wit the above requisites 9. Create two CircuitTermination (A & Z) to site `testsite` on the circuit 10. Connect end A to `inf1` 11. Connect end Z to `inf2` 12. Press the delete button next to the swap button on CircuitTermination A 13. Press delete ### Expected Behavior Circuit termination is deleted ### Observed Behavior The following exception is thrown: ``` 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 103, in view return self.dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/utilities/views.py", line 99, 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 142, in dispatch return handler(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 366, in post obj.delete() File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1118, in delete return collector.delete() File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/deletion.py", line 493, 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/circuits/signals.py", line 27, in rebuild_cablepaths rebuild_paths([peer_termination]) File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 60, in rebuild_paths create_cablepath(cp.origins) File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 43, in create_cablepath cp = CablePath.from_origin(terminations) File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 529, in from_origin path.append([ File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 530, in <listcomp> object_to_path_node(t) for t in remote_terminations File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 21, in object_to_path_node ct = ContentType.objects.get_for_model(obj) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 41, in get_for_model opts = self._get_opts(model, for_concrete_model) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 28, in _get_opts model = model._meta.concrete_model AttributeError: 'NoneType' object has no attribute '_meta' Internal Server Error: /circuits/circuit-terminations/57/delete/ 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 103, in view return self.dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/base.py", line 26, in dispatch return super().dispatch(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/utilities/views.py", line 99, 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 142, in dispatch return handler(request, *args, **kwargs) File "/home/main/devel/repos/netbox/netbox/netbox/views/generic/object_views.py", line 366, in post obj.delete() File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/base.py", line 1118, in delete return collector.delete() File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/db/models/deletion.py", line 493, 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/circuits/signals.py", line 27, in rebuild_cablepaths rebuild_paths([peer_termination]) File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 60, in rebuild_paths create_cablepath(cp.origins) File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 43, in create_cablepath cp = CablePath.from_origin(terminations) File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 529, in from_origin path.append([ File "/home/main/devel/repos/netbox/netbox/dcim/models/cables.py", line 530, in <listcomp> object_to_path_node(t) for t in remote_terminations File "/home/main/devel/repos/netbox/netbox/dcim/utils.py", line 21, in object_to_path_node ct = ContentType.objects.get_for_model(obj) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 41, in get_for_model opts = self._get_opts(model, for_concrete_model) File "/home/main/devel/repos/netbox/venv/lib/python3.10/site-packages/django/contrib/contenttypes/models.py", line 28, in _get_opts model = model._meta.concrete_model AttributeError: 'NoneType' object has no attribute '_meta' ```
adam added the type: bugstatus: acceptedtopic: cabling labels 2025-12-29 20:23:44 +01:00
adam closed this issue 2025-12-29 20:23:44 +01:00
Author
Owner

@kkthxbye-code commented on GitHub (Jan 6, 2023):

The cause might be similar to https://github.com/netbox-community/netbox/issues/10201

Cable paths are rebuilt for a path where parts are in the process of being deleted?

@kkthxbye-code commented on GitHub (Jan 6, 2023): The cause might be similar to https://github.com/netbox-community/netbox/issues/10201 Cable paths are rebuilt for a path where parts are in the process of being deleted?
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#7467