some fixes for when there's a node with now FWs
This commit is contained in:
parent
efd4f32377
commit
5953bc9acc
2 changed files with 25 additions and 9 deletions
|
@ -105,7 +105,10 @@ class MeshNodeQuerySet(models.QuerySet):
|
||||||
).prefetch_related("uplink").distinct('message_type', 'src_node'):
|
).prefetch_related("uplink").distinct('message_type', 'src_node'):
|
||||||
nodes[message.src_node_id].last_messages[message.message_type] = message
|
nodes[message.src_node_id].last_messages[message.message_type] = message
|
||||||
for node in nodes.values():
|
for node in nodes.values():
|
||||||
node.last_messages["any"] = max(node.last_messages.values(), key=attrgetter("datetime"))
|
node.last_messages["any"] = (
|
||||||
|
max(node.last_messages.values(), key=attrgetter("datetime"))
|
||||||
|
if node.last_messages else None
|
||||||
|
)
|
||||||
self._prefetch_last_messages_done = True
|
self._prefetch_last_messages_done = True
|
||||||
except NotSupportedError:
|
except NotSupportedError:
|
||||||
pass
|
pass
|
||||||
|
@ -118,6 +121,7 @@ class MeshNodeQuerySet(models.QuerySet):
|
||||||
sha256_hash__in=set(
|
sha256_hash__in=set(
|
||||||
node.last_messages[MeshMessageType.CONFIG_FIRMWARE].parsed.app_desc.app_elf_sha256
|
node.last_messages[MeshMessageType.CONFIG_FIRMWARE].parsed.app_desc.app_elf_sha256
|
||||||
for node in self._result_cache
|
for node in self._result_cache
|
||||||
|
if node.last_messages[MeshMessageType.CONFIG_FIRMWARE]
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
|
@ -125,12 +129,15 @@ class MeshNodeQuerySet(models.QuerySet):
|
||||||
# assign firmware descriptions
|
# assign firmware descriptions
|
||||||
for node in nodes.values():
|
for node in nodes.values():
|
||||||
firmware_desc = node.firmware_description
|
firmware_desc = node.firmware_description
|
||||||
node._firmware_description = firmwares.get(firmware_desc.get_lookup(), firmware_desc)
|
node._firmware_description = (
|
||||||
|
firmwares.get(firmware_desc.get_lookup(), firmware_desc)
|
||||||
|
if firmware_desc else None
|
||||||
|
)
|
||||||
|
|
||||||
# get date of first appearance
|
# get date of first appearance
|
||||||
nodes_to_complete = tuple(
|
nodes_to_complete = tuple(
|
||||||
node for node in nodes.values()
|
node for node in nodes.values()
|
||||||
if node._firmware_description.build is None
|
if node._firmware_description and node._firmware_description.build is None
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
created_lookup = {
|
created_lookup = {
|
||||||
|
@ -265,13 +272,19 @@ class MeshNode(models.Model):
|
||||||
|
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
@cached_property
|
@cached_property
|
||||||
def firmware_description(self) -> FirmwareDescription:
|
def firmware_description(self) -> Optional[FirmwareDescription]:
|
||||||
with suppress(AttributeError):
|
with suppress(AttributeError):
|
||||||
return self._firmware_description
|
return self._firmware_description
|
||||||
|
|
||||||
|
fw_msg = self.last_messages[MeshMessageType.CONFIG_FIRMWARE]
|
||||||
|
hw_msg = self.last_messages[MeshMessageType.CONFIG_HARDWARE]
|
||||||
|
if not fw_msg or not hw_msg:
|
||||||
|
return None
|
||||||
|
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
firmware_msg: ConfigFirmwareMessage = self.last_messages[MeshMessageType.CONFIG_FIRMWARE].parsed
|
firmware_msg: ConfigFirmwareMessage = fw_msg.parsed
|
||||||
# noinspection PyTypeChecker
|
# noinspection PyTypeChecker
|
||||||
hardware_msg: ConfigHardwareMessage = self.last_messages[MeshMessageType.CONFIG_HARDWARE].parsed
|
hardware_msg: ConfigHardwareMessage = hw_msg.parsed
|
||||||
return FirmwareDescription(
|
return FirmwareDescription(
|
||||||
chip=hardware_msg.chip,
|
chip=hardware_msg.chip,
|
||||||
project_name=firmware_msg.app_desc.project_name,
|
project_name=firmware_msg.app_desc.project_name,
|
||||||
|
@ -283,9 +296,12 @@ class MeshNode(models.Model):
|
||||||
@cached_property
|
@cached_property
|
||||||
def hardware_description(self) -> HardwareDescription:
|
def hardware_description(self) -> HardwareDescription:
|
||||||
# noinspection PyUnresolvedReferences
|
# noinspection PyUnresolvedReferences
|
||||||
|
|
||||||
|
hw_msg = self.last_messages[MeshMessageType.CONFIG_HARDWARE]
|
||||||
|
board_msg = self.last_messages[MeshMessageType.CONFIG_BOARD]
|
||||||
return HardwareDescription(
|
return HardwareDescription(
|
||||||
chip=self.last_messages[MeshMessageType.CONFIG_HARDWARE].parsed.chip,
|
chip=hw_msg.parsed.chip if hw_msg else None,
|
||||||
board=self.last_messages[MeshMessageType.CONFIG_BOARD].parsed.board_config.board,
|
board=board_msg.parsed.board_config.board if board_msg else None,
|
||||||
)
|
)
|
||||||
|
|
||||||
# overriden by prefetch_firmwares()
|
# overriden by prefetch_firmwares()
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
<td>{{ firmware.idf_version }}</td>
|
<td>{{ firmware.idf_version }}</td>
|
||||||
<td>
|
<td>
|
||||||
{% for node in nodes %}
|
{% for node in nodes %}
|
||||||
{% mesh_node node %}
|
{% mesh_node node %}<br>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue