From 1fcb68f42673db1762dffb55dab5e770c73cacdb Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Laura=20Kl=C3=BCnder?=
Date: Sat, 30 Mar 2024 22:12:55 +0100
Subject: [PATCH] remove node name
---
src/c3nav/mesh/forms.py | 6 ------
.../migrations/0014_remove_meshnode_name.py | 17 +++++++++++++++
src/c3nav/mesh/models.py | 7 ++++++-
.../mesh/templates/mesh/node_detail.html | 3 ---
src/c3nav/mesh/urls.py | 3 +--
src/c3nav/mesh/utils.py | 3 ++-
src/c3nav/mesh/views/nodes.py | 21 +------------------
7 files changed, 27 insertions(+), 33 deletions(-)
create mode 100644 src/c3nav/mesh/migrations/0014_remove_meshnode_name.py
diff --git a/src/c3nav/mesh/forms.py b/src/c3nav/mesh/forms.py
index 1a6692bd..3a661d76 100644
--- a/src/c3nav/mesh/forms.py
+++ b/src/c3nav/mesh/forms.py
@@ -289,12 +289,6 @@ class OTAApplyMessageForm(MeshMessageForm):
reboot = forms.BooleanField(required=False, label=_('reboot'))
-class MeshNodeForm(forms.ModelForm):
- class Meta:
- model = MeshNode
- fields = ["name"]
-
-
class RangingForm(forms.Form):
msg_types = {}
diff --git a/src/c3nav/mesh/migrations/0014_remove_meshnode_name.py b/src/c3nav/mesh/migrations/0014_remove_meshnode_name.py
new file mode 100644
index 00000000..8b6bfca7
--- /dev/null
+++ b/src/c3nav/mesh/migrations/0014_remove_meshnode_name.py
@@ -0,0 +1,17 @@
+# Generated by Django 5.0.1 on 2024-03-30 21:11
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('mesh', '0013_meshnode_upstream_alter_nodemessage_message_type'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='meshnode',
+ name='name',
+ ),
+ ]
diff --git a/src/c3nav/mesh/models.py b/src/c3nav/mesh/models.py
index 98404fd4..7ce3f9e1 100644
--- a/src/c3nav/mesh/models.py
+++ b/src/c3nav/mesh/models.py
@@ -256,7 +256,6 @@ class MeshNode(models.Model):
code='invalid_macaddress'
)])
- name = models.CharField(_('name'), max_length=32, null=True, blank=True)
first_seen = models.DateTimeField(_('first seen'), auto_now_add=True)
uplink = models.ForeignKey('MeshUplink', models.PROTECT, null=True,
related_name='routed_nodes', verbose_name=_('uplink'))
@@ -265,6 +264,12 @@ class MeshNode(models.Model):
last_signin = models.DateTimeField(_('last signin'), null=True)
objects = models.Manager.from_queryset(MeshNodeQuerySet)()
+ @property
+ def name(self):
+ node_message = self.last_messages[MeshMessageType.CONFIG_NODE]
+ if node_message:
+ return f"{node_message.parsed.content.number} {node_message.parsed.content.name}".strip()
+
def __str__(self):
if self.name:
return '%s (%s)' % (self.address, self.name)
diff --git a/src/c3nav/mesh/templates/mesh/node_detail.html b/src/c3nav/mesh/templates/mesh/node_detail.html
index adc3b79b..7dbbb886 100644
--- a/src/c3nav/mesh/templates/mesh/node_detail.html
+++ b/src/c3nav/mesh/templates/mesh/node_detail.html
@@ -45,9 +45,6 @@
-
- {% trans 'Edit' %}
-
{% trans 'View messages' %}
diff --git a/src/c3nav/mesh/urls.py b/src/c3nav/mesh/urls.py
index 9e6b1e23..85c7f9ac 100644
--- a/src/c3nav/mesh/urls.py
+++ b/src/c3nav/mesh/urls.py
@@ -5,7 +5,7 @@ from c3nav.mesh.views.firmware import (FirmwareBuildDetailView, FirmwareDetailVi
FirmwaresListView, OTADetailView, OTAListView)
from c3nav.mesh.views.messages import MeshMessageListView, MeshMessageSendingView, MeshMessageSendView
from c3nav.mesh.views.misc import MeshLogView, MeshRangingView
-from c3nav.mesh.views.nodes import NodeDetailView, NodeEditView, NodeListView
+from c3nav.mesh.views.nodes import NodeDetailView, NodeListView
urlpatterns = [
path('', NodeListView.as_view(), name='mesh.nodes'),
@@ -19,7 +19,6 @@ urlpatterns = [
path('ota/all/', OTAListView.as_view(all=True), name='mesh.ota.list.all'),
path('ota//', OTADetailView.as_view(), name='mesh.ota.detail'),
path('nodes//', NodeDetailView.as_view(), name='mesh.node.detail'),
- path('nodes//edit/', NodeEditView.as_view(), name='mesh.node.edit'),
path('message/sending//', MeshMessageSendingView.as_view(), name='mesh.sending'),
path('message///', MeshMessageSendView.as_view(), name='mesh.send'),
path('message//', MeshMessageSendView.as_view(), name='mesh.send'),
diff --git a/src/c3nav/mesh/utils.py b/src/c3nav/mesh/utils.py
index b2e18b28..e7040105 100644
--- a/src/c3nav/mesh/utils.py
+++ b/src/c3nav/mesh/utils.py
@@ -17,8 +17,9 @@ def indent_c(code):
def get_node_names():
from c3nav.mesh.models import MeshNode
+ from c3nav.mesh.messages import MeshMessageType
return {
- **{node.address: node.name for node in MeshNode.objects.all()},
+ **{node.address: node.name for node in MeshNode.objects.prefetch_last_messages(MeshMessageType.CONFIG_NODE)},
'ff:ff:ff:ff:ff:ff': "broadcast",
'00:00:00:ff:ff:ff': "direct parent",
'00:00:00:00:00:00': "root",
diff --git a/src/c3nav/mesh/views/nodes.py b/src/c3nav/mesh/views/nodes.py
index b4be562f..8d3be645 100644
--- a/src/c3nav/mesh/views/nodes.py
+++ b/src/c3nav/mesh/views/nodes.py
@@ -1,9 +1,5 @@
-from django.contrib.messages.views import SuccessMessageMixin
-from django.urls import reverse
-from django.utils.translation import gettext_lazy as _
-from django.views.generic import DetailView, ListView, UpdateView
+from django.views.generic import DetailView, ListView
-from c3nav.mesh.forms import MeshNodeForm
from c3nav.mesh.models import MeshNode
from c3nav.mesh.views.base import MeshControlMixin
@@ -28,18 +24,3 @@ class NodeDetailView(MeshControlMixin, DetailView):
def get_queryset(self):
return super().get_queryset().prefetch_last_messages().prefetch_firmwares().select_related("upstream")
-
-class NodeEditView(MeshControlMixin, SuccessMessageMixin, UpdateView):
- model = MeshNode
- form_class = MeshNodeForm
- template_name = "control/form.html"
- success_message = _('Name updated successfully')
-
- def get_context_data(self, **kwargs):
- return {
- **super().get_context_data(),
- 'title': _('Editing mesh node: %s') % self.get_object(),
- }
-
- def get_success_url(self):
- return reverse('mesh.node.detail', kwargs={'pk': self.get_object().pk})