rename Message → MeshMessage

This commit is contained in:
Laura Klünder 2023-10-04 15:44:54 +02:00
parent 21b75bec86
commit c5ac3ceb76
6 changed files with 34 additions and 34 deletions

View file

@ -20,7 +20,7 @@ from c3nav.mapdata.forms import I18nModelFormMixin
from c3nav.mapdata.models import MapUpdate, Space from c3nav.mapdata.models import MapUpdate, Space
from c3nav.mapdata.models.access import (AccessPermission, AccessPermissionToken, AccessPermissionTokenItem, from c3nav.mapdata.models.access import (AccessPermission, AccessPermissionToken, AccessPermissionTokenItem,
AccessRestriction, AccessRestrictionGroup) AccessRestriction, AccessRestrictionGroup)
from c3nav.mesh.messages import MessageType from c3nav.mesh.messages import MeshMessageType
from c3nav.mesh.models import MeshNode from c3nav.mesh.models import MeshNode
from c3nav.site.models import Announcement from c3nav.site.models import Announcement
@ -302,7 +302,7 @@ class MapUpdateForm(ModelForm):
class MeshMessageFilterForm(Form): class MeshMessageFilterForm(Form):
message_types = MultipleChoiceField( message_types = MultipleChoiceField(
choices=[(msgtype.value, msgtype.name) for msgtype in MessageType], choices=[(msgtype.value, msgtype.name) for msgtype in MeshMessageType],
required=False, required=False,
label=_('message types'), label=_('message types'),
) )

View file

@ -8,7 +8,7 @@ from django.views.generic import ListView, DetailView, FormView
from c3nav.control.forms import MeshMessageFilterForm from c3nav.control.forms import MeshMessageFilterForm
from c3nav.control.views.base import ControlPanelMixin from c3nav.control.views.base import ControlPanelMixin
from c3nav.mesh.forms import MeshMessageForm from c3nav.mesh.forms import MeshMessageForm
from c3nav.mesh.messages import MessageType from c3nav.mesh.messages import MeshMessageType
from c3nav.mesh.models import MeshNode, NodeMessage from c3nav.mesh.models import MeshNode, NodeMessage
@ -69,7 +69,7 @@ class MeshMessageSendView(ControlPanelMixin, FormView):
def get_form_class(self): def get_form_class(self):
try: try:
return MeshMessageForm.get_form_for_type(MessageType[self.kwargs['msg_type']]) return MeshMessageForm.get_form_for_type(MeshMessageType[self.kwargs['msg_type']])
except KeyError: except KeyError:
raise Http404('unknown message type') raise Http404('unknown message type')

View file

@ -6,7 +6,7 @@ from django.utils import timezone
from c3nav.control.views.utils import get_mesh_comm_group from c3nav.control.views.utils import get_mesh_comm_group
from c3nav.mesh import messages from c3nav.mesh import messages
from c3nav.mesh.messages import Message, BROADCAST_ADDRESS from c3nav.mesh.messages import MeshMessage, BROADCAST_ADDRESS
from c3nav.mesh.models import MeshNode, NodeMessage from c3nav.mesh.models import MeshNode, NodeMessage
@ -36,7 +36,7 @@ class MeshConsumer(WebsocketConsumer):
if bytes_data is None: if bytes_data is None:
return return
try: try:
msg = messages.Message.decode(bytes_data) msg = messages.MeshMessage.decode(bytes_data)
except Exception: except Exception:
traceback.print_exc() traceback.print_exc()
return return
@ -96,9 +96,9 @@ class MeshConsumer(WebsocketConsumer):
self.remove_dst_nodes((data["address"], )) self.remove_dst_nodes((data["address"], ))
def mesh_send(self, data): def mesh_send(self, data):
self.send_msg(Message.fromjson(data["msg"])) self.send_msg(MeshMessage.fromjson(data["msg"]))
def log_received_message(self, src_node: MeshNode, msg: messages.Message): def log_received_message(self, src_node: MeshNode, msg: messages.MeshMessage):
NodeMessage.objects.create( NodeMessage.objects.create(
uplink_node=self.uplink_node, uplink_node=self.uplink_node,
src_node=src_node, src_node=src_node,

View file

@ -2,7 +2,7 @@ from django import forms
from django.http import Http404 from django.http import Http404
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from c3nav.mesh.messages import MessageType, Message, ROOT_ADDRESS from c3nav.mesh.messages import MeshMessageType, MeshMessage, ROOT_ADDRESS
from c3nav.mesh.models import MeshNode from c3nav.mesh.models import MeshNode
@ -56,7 +56,7 @@ class MeshMessageForm(forms.Form):
class ConfigUplinkMessageForm(MeshMessageForm): class ConfigUplinkMessageForm(MeshMessageForm):
msg_type = MessageType.CONFIG_UPLINK msg_type = MeshMessageType.CONFIG_UPLINK
enabled = forms.BooleanField(required=False, label=_('enabled')) enabled = forms.BooleanField(required=False, label=_('enabled'))
ssid = forms.CharField(required=False, label=_('ssid'), max_length=31) ssid = forms.CharField(required=False, label=_('ssid'), max_length=31)
@ -80,7 +80,7 @@ class ConfigUplinkMessageForm(MeshMessageForm):
recipients = [self.recipient] if self.recipient else self.cleaned_data['recipients'] recipients = [self.recipient] if self.recipient else self.cleaned_data['recipients']
for recipient in recipients: for recipient in recipients:
print('sending to ', recipient) print('sending to ', recipient)
Message.fromjson({ MeshMessage.fromjson({
'dst': recipient, 'dst': recipient,
**msg_data, **msg_data,
}).send() }).send()

View file

@ -16,7 +16,7 @@ NO_LAYER = 0xFF
@unique @unique
class MessageType(IntEnum): class MeshMessageType(IntEnum):
ECHO_REQUEST = 0x01 ECHO_REQUEST = 0x01
ECHO_RESPONSE = 0x02 ECHO_RESPONSE = 0x02
@ -42,7 +42,7 @@ class ChipType(IntEnum):
@dataclass @dataclass
class Message: class MeshMessage:
dst: str = field(metadata={'format': MacAddressFormat()}) dst: str = field(metadata={'format': MacAddressFormat()})
src: str = field(metadata={'format': MacAddressFormat()}) src: str = field(metadata={'format': MacAddressFormat()})
msg_id: int = field(metadata={'format': SimpleFormat('B')}, init=False, repr=False) msg_id: int = field(metadata={'format': SimpleFormat('B')}, init=False, repr=False)
@ -53,9 +53,9 @@ class Message:
super().__init_subclass__(**kwargs) super().__init_subclass__(**kwargs)
if msg_id: if msg_id:
cls.msg_id = msg_id cls.msg_id = msg_id
if msg_id in Message.msg_types: if msg_id in MeshMessage.msg_types:
raise TypeError('duplicate use of msg_id %d' % msg_id) raise TypeError('duplicate use of msg_id %d' % msg_id)
Message.msg_types[msg_id] = cls MeshMessage.msg_types[msg_id] = cls
def encode(self): def encode(self):
data = bytes() data = bytes()
@ -92,42 +92,42 @@ class Message:
@dataclass @dataclass
class EchoRequestMessage(Message, msg_id=MessageType.ECHO_REQUEST): class EchoRequestMessage(MeshMessage, msg_id=MeshMessageType.ECHO_REQUEST):
content: str = field(default='', metadata={'format': VarStrFormat()}) content: str = field(default='', metadata={'format': VarStrFormat()})
@dataclass @dataclass
class EchoResponseMessage(Message, msg_id=MessageType.ECHO_RESPONSE): class EchoResponseMessage(MeshMessage, msg_id=MeshMessageType.ECHO_RESPONSE):
content: str = field(default='', metadata={'format': VarStrFormat()}) content: str = field(default='', metadata={'format': VarStrFormat()})
@dataclass @dataclass
class MeshSigninMessage(Message, msg_id=MessageType.MESH_SIGNIN): class MeshSigninMessage(MeshMessage, msg_id=MeshMessageType.MESH_SIGNIN):
pass pass
@dataclass @dataclass
class MeshLayerAnnounceMessage(Message, msg_id=MessageType.MESH_LAYER_ANNOUNCE): class MeshLayerAnnounceMessage(MeshMessage, msg_id=MeshMessageType.MESH_LAYER_ANNOUNCE):
layer: int = field(metadata={'format': SimpleFormat('B')}) layer: int = field(metadata={'format': SimpleFormat('B')})
@dataclass @dataclass
class MeshAddDestinationsMessage(Message, msg_id=MessageType.MESH_ADD_DESTINATIONS): class MeshAddDestinationsMessage(MeshMessage, msg_id=MeshMessageType.MESH_ADD_DESTINATIONS):
mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()}) mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()})
@dataclass @dataclass
class MeshRemoveDestinationsMessage(Message, msg_id=MessageType.MESH_REMOVE_DESTINATIONS): class MeshRemoveDestinationsMessage(MeshMessage, msg_id=MeshMessageType.MESH_REMOVE_DESTINATIONS):
mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()}) mac_addresses: list[str] = field(default_factory=list, metadata={'format': MacAddressesListFormat()})
@dataclass @dataclass
class ConfigDumpMessage(Message, msg_id=MessageType.CONFIG_DUMP): class ConfigDumpMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_DUMP):
pass pass
@dataclass @dataclass
class ConfigFirmwareMessage(Message, msg_id=MessageType.CONFIG_FIRMWARE): class ConfigFirmwareMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_FIRMWARE):
chip: int = field(metadata={'format': SimpleFormat('H')}) chip: int = field(metadata={'format': SimpleFormat('H')})
revision: int = field(metadata={'format': SimpleFormat('2B')}) revision: int = field(metadata={'format': SimpleFormat('2B')})
magic_word: int = field(metadata={'format': SimpleFormat('I')}, repr=False) magic_word: int = field(metadata={'format': SimpleFormat('I')}, repr=False)
@ -155,19 +155,19 @@ class ConfigFirmwareMessage(Message, msg_id=MessageType.CONFIG_FIRMWARE):
@dataclass @dataclass
class ConfigPositionMessage(Message, msg_id=MessageType.CONFIG_POSITION): class ConfigPositionMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_POSITION):
x_pos: int = field(metadata={'format': SimpleFormat('I')}) x_pos: int = field(metadata={'format': SimpleFormat('I')})
y_pos: int = field(metadata={'format': SimpleFormat('I')}) y_pos: int = field(metadata={'format': SimpleFormat('I')})
z_pos: int = field(metadata={'format': SimpleFormat('H')}) z_pos: int = field(metadata={'format': SimpleFormat('H')})
@dataclass @dataclass
class ConfigLedMessage(Message, msg_id=MessageType.CONFIG_LED): class ConfigLedMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_LED):
led_config: LedConfig = field(metadata={'format': LedConfigFormat()}) led_config: LedConfig = field(metadata={'format': LedConfigFormat()})
@dataclass @dataclass
class ConfigUplinkMessage(Message, msg_id=MessageType.CONFIG_UPLINK): class ConfigUplinkMessage(MeshMessage, msg_id=MeshMessageType.CONFIG_UPLINK):
enabled: bool = field(metadata={'format': BoolFormat()}) enabled: bool = field(metadata={'format': BoolFormat()})
ssid: str = field(metadata={'format': FixedStrFormat(32)}) ssid: str = field(metadata={'format': FixedStrFormat(32)})
password: str = field(metadata={'format': FixedStrFormat(64)}) password: str = field(metadata={'format': FixedStrFormat(64)})

View file

@ -4,7 +4,7 @@ from functools import cached_property
from django.db import models, NotSupportedError from django.db import models, NotSupportedError
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from c3nav.mesh.messages import MessageType, ChipType, Message as MeshMessage from c3nav.mesh.messages import MeshMessageType, ChipType, MeshMessage as MeshMessage
class MeshNodeQuerySet(models.QuerySet): class MeshNodeQuerySet(models.QuerySet):
@ -18,10 +18,10 @@ class MeshNodeQuerySet(models.QuerySet):
clone._prefetch_last_messages = self._prefetch_last_messages clone._prefetch_last_messages = self._prefetch_last_messages
return clone return clone
def prefetch_last_messages(self, *types: MessageType): def prefetch_last_messages(self, *types: MeshMessageType):
clone = self._chain() clone = self._chain()
clone._prefetch_last_messages |= ( clone._prefetch_last_messages |= (
set(types) if types else set(msgtype.value for msgtype in MessageType) set(types) if types else set(msgtype.value for msgtype in MeshMessageType)
) )
return clone return clone
@ -37,7 +37,7 @@ class MeshNodeQuerySet(models.QuerySet):
nodes[message.node].last_messages[message.message_type] = message nodes[message.node].last_messages[message.message_type] = message
except NotSupportedError: except NotSupportedError:
pass pass
print(tuple(nodes.values())[0].last_messages[MessageType.MESH_SIGNIN]) print(tuple(nodes.values())[0].last_messages[MeshMessageType.MESH_SIGNIN])
class LastMessagesByTypeLookup(UserDict): class LastMessagesByTypeLookup(UserDict):
@ -46,14 +46,14 @@ class LastMessagesByTypeLookup(UserDict):
self.node = node self.node = node
def _get_key(self, item): def _get_key(self, item):
if isinstance(item, MessageType): if isinstance(item, MeshMessageType):
return item return item
if isinstance(item, str): if isinstance(item, str):
try: try:
return getattr(MessageType, item) return getattr(MeshMessageType, item)
except AttributeError: except AttributeError:
pass pass
return MessageType(item) return MeshMessageType(item)
def __getitem__(self, key): def __getitem__(self, key):
key = self._get_key(key) key = self._get_key(key)
@ -89,7 +89,7 @@ class MeshNode(models.Model):
class NodeMessage(models.Model): class NodeMessage(models.Model):
MESSAGE_TYPES = [(msgtype.value, msgtype.name) for msgtype in MessageType] MESSAGE_TYPES = [(msgtype.value, msgtype.name) for msgtype in MeshMessageType]
src_node = models.ForeignKey('MeshNode', models.PROTECT, src_node = models.ForeignKey('MeshNode', models.PROTECT,
related_name='received_messages', verbose_name=_('node')) related_name='received_messages', verbose_name=_('node'))
uplink_node = models.ForeignKey('MeshNode', models.PROTECT, uplink_node = models.ForeignKey('MeshNode', models.PROTECT,