TypeError w/ 3-Phase PDUs w/ no Maximum Power defined on Power Port #7276

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

Originally created by @iunderwood on GitHub (Nov 23, 2022).

NetBox version

v3.3.8

Python version

3.8

Steps to Reproduce

These steps can be followed on the demo site.

  • Add a new device type:
    Manufacturer: APC
    Model: 3-Phase PDU

  • Add Power Port:
    Name: 208-In

  • Add Power Outlets:

    Name: A
    Power Port: 208-In
    Feed Leg: A

    Name: B
    Power Port: 208-In
    Feed Leg: B

    Name: C
    Power Port: 208-In
    Feed Leg: C

  • Add Power Feed:
    Pawer Panel: Panel 1
    Name: P1-3PH
    Voltage: 208
    Amperage: 30
    Pahse: Three Phase

  • Create PDU:
    Name: TestPDU-3P
    Device Role: PDU
    Device Type: 3-Phase PDU
    Site: MDF

  • Connect Power Port 208-In to Power Feed P1-3PH.

  • Attempt to click to Device tab.

Expected Behavior

Device renders without error.

Observed Behavior

Error is received on-screen as the following:

<class 'TypeError'>

unsupported operand type(s) for /: 'str' and 'int'

Python version: 3.8.10
NetBox version: 3.3.8

The Traceback originally observed in the log follows:

Internal Server Error: /dcim/devices/3244/
Traceback (most recent call last):
File "/opt/netbox/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner
response = get_response(request)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view
return self.dispatch(request, *args, **kwargs)
File "/opt/netbox/netbox/utilities/views.py", line 90, in dispatch
return super().dispatch(request, *args, **kwargs)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch
return handler(request, *args, **kwargs)
File "/opt/netbox/netbox/netbox/views/generic/object_views.py", line 68, in get
return render(request, self.get_template_name(), {
File "/opt/netbox/venv/lib/python3.8/site-packages/django/shortcuts.py", line 24, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 62, in render
return self.template.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 175, in render
return self._render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render
return compiled_parent._render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render
return self.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 63, in render
result = block.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 322, in render
return nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 542, in render
return self.nodelist.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in
return SafeString("".join([node.render_annotated(context) for node in self]))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 238, in render
nodelist.append(node.render_annotated(context))
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated
return self.render(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1059, in render
output = self.filter_expression.resolve(context)
File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 739, in resolve
new_obj = func(obj, *arg_vals)
File "/opt/netbox/netbox/utilities/templatetags/helpers.py", line 131, in divide
return round(x / y)
TypeError: unsupported operand type(s) for /: 'str' and 'int'

Debug indicate the problem is with the line here within the template, but the problem is the powerfeed.available_power is an empty string and not zero.

<td>{{ powerfeed.available_power|divide:3 }}VA</td>
For the local variables:

Variable Value
x ''
y 3

Originally created by @iunderwood on GitHub (Nov 23, 2022). ### NetBox version v3.3.8 ### Python version 3.8 ### Steps to Reproduce These steps can be followed on the demo site. * Add a new device type: Manufacturer: APC Model: 3-Phase PDU * Add Power Port: Name: 208-In * Add Power Outlets: Name: A Power Port: 208-In Feed Leg: A Name: B Power Port: 208-In Feed Leg: B Name: C Power Port: 208-In Feed Leg: C * Add Power Feed: Pawer Panel: Panel 1 Name: P1-3PH Voltage: 208 Amperage: 30 Pahse: Three Phase * Create PDU: Name: TestPDU-3P Device Role: PDU Device Type: 3-Phase PDU Site: MDF * Connect Power Port 208-In to Power Feed P1-3PH. * Attempt to click to Device tab. ### Expected Behavior Device renders without error. ### Observed Behavior Error is received on-screen as the following: > <class 'TypeError'> > > unsupported operand type(s) for /: 'str' and 'int' > > Python version: 3.8.10 > NetBox version: 3.3.8 The Traceback originally observed in the log follows: > Internal Server Error: /dcim/devices/3244/ > Traceback (most recent call last): > File "/opt/netbox/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 55, in inner > response = get_response(request) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 197, in _get_response > response = wrapped_callback(request, *callback_args, **callback_kwargs) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 84, in view > return self.dispatch(request, *args, **kwargs) > File "/opt/netbox/netbox/utilities/views.py", line 90, in dispatch > return super().dispatch(request, *args, **kwargs) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/views/generic/base.py", line 119, in dispatch > return handler(request, *args, **kwargs) > File "/opt/netbox/netbox/netbox/views/generic/object_views.py", line 68, in get > return render(request, self.get_template_name(), { > File "/opt/netbox/venv/lib/python3.8/site-packages/django/shortcuts.py", line 24, in render > content = loader.render_to_string(template_name, context, request, using=using) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader.py", line 62, in render_to_string > return template.render(context, request) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/backends/django.py", line 62, in render > return self.template.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 175, in render > return self._render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render > return self.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render > return compiled_parent._render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render > return self.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render > return compiled_parent._render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render > return self.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render > return compiled_parent._render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render > return self.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 157, in render > return compiled_parent._render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/test/utils.py", line 111, in instrumented_test_render > return self.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 63, in render > result = block.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 63, in render > result = block.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/loader_tags.py", line 63, in render > result = block.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 322, in render > return nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 238, in render > nodelist.append(node.render_annotated(context)) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 542, in render > return self.nodelist.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in render > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1000, in <listcomp> > return SafeString("".join([node.render_annotated(context) for node in self])) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/defaulttags.py", line 238, in render > nodelist.append(node.render_annotated(context)) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 958, in render_annotated > return self.render(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 1059, in render > output = self.filter_expression.resolve(context) > File "/opt/netbox/venv/lib/python3.8/site-packages/django/template/base.py", line 739, in resolve > new_obj = func(obj, *arg_vals) > File "/opt/netbox/netbox/utilities/templatetags/helpers.py", line 131, in divide > return round(x / y) > TypeError: unsupported operand type(s) for /: 'str' and 'int' > Debug indicate the problem is with the line here within the template, but the problem is the powerfeed.available_power is an empty string and not zero. `<td>{{ powerfeed.available_power|divide:3 }}VA</td> ` For the local variables: > Variable Value > x '' > y 3
adam added the type: bugstatus: duplicate labels 2025-12-29 20:21:09 +01:00
adam closed this issue 2025-12-29 20:21:09 +01:00
Author
Owner

@fabi125 commented on GitHub (Nov 23, 2022):

Looks like there are three places that got missed when connected_endpoint got replaced with connected_endpoints:

b1da374df2/netbox/templates/dcim/interface.html (L213)

b1da374df2/netbox/templates/dcim/device.html (L232)

b1da374df2/netbox/templates/dcim/rack.html (L176)

@fabi125 commented on GitHub (Nov 23, 2022): Looks like there are three places that got missed when `connected_endpoint` got replaced with `connected_endpoints`: https://github.com/netbox-community/netbox/blob/b1da374df201a06daa90a3c462fafd42cfa6ed9b/netbox/templates/dcim/interface.html#L213 https://github.com/netbox-community/netbox/blob/b1da374df201a06daa90a3c462fafd42cfa6ed9b/netbox/templates/dcim/device.html#L232 https://github.com/netbox-community/netbox/blob/b1da374df201a06daa90a3c462fafd42cfa6ed9b/netbox/templates/dcim/rack.html#L176
Author
Owner

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

Thank you for submitting this issue, however it appears that this topic has already been raised. Please see issue #10236 for further discussion.

@jeremystretch commented on GitHub (Nov 28, 2022): Thank you for submitting this issue, however it appears that this topic has already been raised. Please see issue #10236 for further discussion.
Author
Owner

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

Just to be clear, the fix will be included in the upcomming 3.3.9.

@kkthxbye-code commented on GitHub (Nov 28, 2022): Just to be clear, the fix will be included in the upcomming 3.3.9.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/netbox#7276