firmware and firmware build details
This commit is contained in:
parent
c872b97fa3
commit
386bd3c888
7 changed files with 284 additions and 11 deletions
|
@ -14,7 +14,7 @@ from c3nav.control.forms import MeshMessageFilterForm
|
|||
from c3nav.control.views.base import ControlPanelMixin
|
||||
from c3nav.mesh.forms import MeshMessageForm, MeshNodeForm
|
||||
from c3nav.mesh.messages import MeshMessage, MeshMessageType
|
||||
from c3nav.mesh.models import FirmwareVersion, MeshNode, NodeMessage
|
||||
from c3nav.mesh.models import FirmwareBuild, FirmwareVersion, MeshNode, NodeMessage
|
||||
from c3nav.mesh.utils import get_node_names, group_msg_type_choices
|
||||
|
||||
|
||||
|
@ -215,3 +215,76 @@ class MeshFirmwaresCurrentListView(ControlPanelMixin, TemplateView):
|
|||
**super().get_context_data(),
|
||||
"firmwares": firmwares,
|
||||
}
|
||||
|
||||
|
||||
class MeshFirmwareDetailView(ControlPanelMixin, DetailView):
|
||||
model = FirmwareVersion
|
||||
template_name = "control/mesh_firmware_detail.html"
|
||||
context_object_name = "firmware"
|
||||
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().prefetch_related('builds', 'builds__firmwarebuildboard_set')
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data()
|
||||
|
||||
nodes = list(MeshNode.objects.all().prefetch_firmwares().prefetch_last_messages(
|
||||
MeshMessageType.CONFIG_BOARD,
|
||||
))
|
||||
builds = self.get_object().builds.all()
|
||||
|
||||
build_lookups = set(build.get_firmware_description().get_lookup() for build in builds)
|
||||
|
||||
installed_nodes = []
|
||||
compatible_nodes = []
|
||||
for node in nodes:
|
||||
if node.firmware_desc.get_lookup() in build_lookups:
|
||||
installed_nodes.append(node)
|
||||
else:
|
||||
node.compatible_builds = []
|
||||
for build in builds:
|
||||
if node.board in build.boards:
|
||||
node.compatible_builds.append(build)
|
||||
if node.compatible_builds:
|
||||
compatible_nodes.append(node)
|
||||
|
||||
ctx.update({
|
||||
'builds': builds,
|
||||
'installed_nodes': installed_nodes,
|
||||
'compatible_nodes': compatible_nodes,
|
||||
})
|
||||
return ctx
|
||||
|
||||
|
||||
class MeshFirmwareBuildDetailView(ControlPanelMixin, DetailView):
|
||||
model = FirmwareBuild
|
||||
template_name = "control/mesh_firmware_build_detail.html"
|
||||
context_object_name = "build"
|
||||
|
||||
def get_queryset(self):
|
||||
return super().get_queryset().prefetch_related('firmwarebuildboard_set')
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
ctx = super().get_context_data()
|
||||
|
||||
nodes = list(MeshNode.objects.all().prefetch_firmwares().prefetch_last_messages(
|
||||
MeshMessageType.CONFIG_BOARD,
|
||||
))
|
||||
|
||||
build_lookup = self.get_object().get_firmware_description().get_lookup()
|
||||
build_boards = self.get_object().boards
|
||||
|
||||
installed_nodes = []
|
||||
compatible_nodes = []
|
||||
for node in nodes:
|
||||
if node.firmware_desc.get_lookup() == build_lookup:
|
||||
installed_nodes.append(node)
|
||||
else:
|
||||
if node.board in build_boards:
|
||||
compatible_nodes.append(node)
|
||||
|
||||
ctx.update({
|
||||
'installed_nodes': installed_nodes,
|
||||
'compatible_nodes': compatible_nodes,
|
||||
})
|
||||
return ctx
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue