Move protobufs to meshtastic.protobuf python namespace

This commit is contained in:
Kevin Hester
2024-06-26 09:43:56 -07:00
parent 0b9af0dcba
commit 88b73611f0
14 changed files with 65 additions and 26 deletions

View File

@@ -37,5 +37,5 @@ jobs:
git config --global user.email 'bot@noreply.github.com'
git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }}
git add protobufs
git add meshtastic
git add meshtastic/protobuf
git commit -m "Update protobuf submodule" && git push || echo "No changes to commit"

View File

@@ -1,5 +1,7 @@
#!/bin/bash
set -e
#Uncomment to run hack
#gsed -i 's/import "\//import ".\//g' ./protobufs/meshtastic/*
#gsed -i 's/package meshtastic;//g' ./protobufs/meshtastic/*
@@ -7,17 +9,45 @@
# protoc looks for mypy plugin in the python path
source $(poetry env info --path)/bin/activate
./nanopb-0.4.8/generator-bin/protoc -I=protobufs --python_out ./ --mypy_out ./ ./protobufs/meshtastic/*.proto
./nanopb-0.4.8/generator-bin/protoc -I=protobufs --python_out ./meshtastic/ --mypy_out ./meshtastic/ ./protobufs/nanopb.proto
# Put our temp files in the poetry build directory
TMPDIR=./build/meshtastic/protofixup
echo "Fixing up protobuf paths in ${TMPDIR} temp directory"
# workaround for import bug in protoc https://github.com/protocolbuffers/protobuf/issues/1491#issuecomment-690618628
# Ensure a clean build
rm -r "${TMPDIR}"
INDIR=${TMPDIR}/in/meshtastic/protobuf
OUTDIR=${TMPDIR}/out
PYIDIR=${TMPDIR}/out
mkdir -p "${OUTDIR}" "${INDIR}" "${PYIDIR}"
cp ./protobufs/meshtastic/*.proto "${INDIR}"
# OS-X sed is apparently a little different and expects an arg for -i
if [[ $OSTYPE == 'darwin'* ]]; then
sed -i '' -E 's/^(import.*_pb2)/from . \1/' meshtastic/*.py
# automate the current workaround (may be related to Meshtastic-protobufs issue #27 https://github.com/meshtastic/protobufs/issues/27)
sed -i '' -E "s/^None = 0/globals()['None'] = 0/" meshtastic/mesh_pb2.py
SEDCMD="sed -i '' -E"
else
sed -i -e 's/^import.*_pb2/from . \0/' meshtastic/*.py
# automate the current workaround (may be related to Meshtastic-protobufs issue #27 https://github.com/meshtastic/protobufs/issues/27)
sed -i -e "s/^None = 0/globals()['None'] = 0/" meshtastic/mesh_pb2.py
SEDCMD="sed -i -E"
fi
# change the package names to meshtastic.protobuf
$SEDCMD 's/^package meshtastic;/package meshtastic.protobuf;/' "${INDIR}/"*.proto
# fix the imports to match
$SEDCMD 's/^import "meshtastic\//import "meshtastic\/protobuf\//' "${INDIR}/"*.proto
# Generate the python files
./nanopb-0.4.8/generator-bin/protoc -I=$TMPDIR/in --python_out "${OUTDIR}" "--mypy_out=${PYIDIR}" $INDIR/*.proto
# Change "from meshtastic.protobuf import" to "from . import"
$SEDCMD 's/^from meshtastic.protobuf import/from . import/' "${OUTDIR}"/meshtastic/protobuf/*pb2*.py[i]
# Create a __init__.py in the out directory
touch "${OUTDIR}/meshtastic/protobuf/__init__.py"
# Copy to the source controlled tree
mkdir -p meshtastic/protobuf
rm -rf meshtastic/protobuf/*pb2*.py
cp "${OUTDIR}/meshtastic/protobuf"/* meshtastic/protobuf
exit 0

View File

@@ -81,7 +81,10 @@ from google.protobuf.json_format import MessageToJson
from pubsub import pub # type: ignore[import-untyped]
from tabulate import tabulate
from meshtastic import (
from meshtastic.node import Node
from meshtastic.util import DeferredExecution, Timeout, catchAndIgnore, fixme, stripnl
from .protobuf import (
admin_pb2,
apponly_pb2,
channel_pb2,
@@ -93,10 +96,10 @@ from meshtastic import (
remote_hardware_pb2,
storeforward_pb2,
telemetry_pb2,
)
from . import (
util,
)
from meshtastic.node import Node
from meshtastic.util import DeferredExecution, Timeout, catchAndIgnore, fixme, stripnl
# Note: To follow PEP224, comments should be after the module variable.

View File

@@ -17,7 +17,8 @@ from pubsub import pub # type: ignore[import-untyped]
import meshtastic.test
import meshtastic.util
from meshtastic import mt_config
from meshtastic import channel_pb2, config_pb2, portnums_pb2, remote_hardware, BROADCAST_ADDR
from meshtastic.protobuf import channel_pb2, config_pb2, portnums_pb2
from meshtastic import remote_hardware, BROADCAST_ADDR
from meshtastic.version import get_active_version
from meshtastic.ble_interface import BLEInterface
from meshtastic.mesh_interface import MeshInterface

View File

@@ -18,10 +18,13 @@ from pubsub import pub # type: ignore[import-untyped]
from tabulate import tabulate
import meshtastic.node
from meshtastic import (
from meshtastic.protobuf import (
mesh_pb2,
portnums_pb2,
telemetry_pb2,
)
from meshtastic import (
BROADCAST_ADDR,
BROADCAST_NUM,
LOCAL_ADDR,

View File

@@ -7,7 +7,7 @@ import time
from typing import Union
from meshtastic import admin_pb2, apponly_pb2, channel_pb2, localonly_pb2, mesh_pb2, portnums_pb2
from meshtastic.protobuf import admin_pb2, apponly_pb2, channel_pb2, localonly_pb2, mesh_pb2, portnums_pb2
from meshtastic.util import (
Timeout,
camel_to_snake,

View File

@@ -4,7 +4,7 @@ import logging
from pubsub import pub # type: ignore[import-untyped]
from meshtastic import portnums_pb2, remote_hardware_pb2
from meshtastic.protobuf import portnums_pb2, remote_hardware_pb2
from meshtastic.util import our_exit

View File

@@ -21,7 +21,7 @@ from meshtastic.__main__ import (
)
from meshtastic import mt_config
from ..channel_pb2 import Channel # pylint: disable=E0611
from ..protobuf.channel_pb2 import Channel # pylint: disable=E0611
# from ..ble_interface import BLEInterface
from ..node import Node

View File

@@ -7,7 +7,8 @@ from unittest.mock import MagicMock, patch
import pytest
from hypothesis import given, strategies as st
from .. import mesh_pb2, config_pb2, BROADCAST_ADDR, LOCAL_ADDR
from ..protobuf import mesh_pb2, config_pb2
from .. import BROADCAST_ADDR, LOCAL_ADDR
from ..mesh_interface import MeshInterface, _timeago
from ..node import Node

View File

@@ -6,8 +6,8 @@ from unittest.mock import MagicMock, patch
import pytest
from .. import localonly_pb2, config_pb2
from ..channel_pb2 import Channel # pylint: disable=E0611
from ..protobuf import localonly_pb2, config_pb2
from ..protobuf.channel_pb2 import Channel # pylint: disable=E0611
from ..node import Node
from ..serial_interface import SerialInterface
from ..mesh_interface import MeshInterface

View File

@@ -6,7 +6,7 @@ from unittest.mock import mock_open, patch
import pytest
from ..serial_interface import SerialInterface
from .. import config_pb2
from ..protobuf import config_pb2
@pytest.mark.unit

View File

@@ -5,7 +5,7 @@ from unittest.mock import patch
import pytest
from .. import config_pb2
from ..protobuf import config_pb2
from ..tcp_interface import TCPInterface

View File

@@ -9,7 +9,7 @@ import pytest
from hypothesis import given, strategies as st
from meshtastic.supported_device import SupportedDevice
from meshtastic.mesh_pb2 import MyNodeInfo
from meshtastic.protobuf import mesh_pb2
from meshtastic.util import (
Timeout,
active_ports_on_supported_devices,
@@ -555,7 +555,7 @@ def test_active_ports_on_supported_devices_mac_duplicates_check(mock_platform, m
@pytest.mark.unit
def test_message_to_json_shows_all():
"""Test that message_to_json prints fields that aren't included in data passed in"""
actual = json.loads(message_to_json(MyNodeInfo()))
actual = json.loads(message_to_json(mesh_pb2.MyNodeInfo()))
expected = { "myNodeNum": 0, "rebootCount": 0, "minAppVersion": 0 }
assert actual == expected

View File

@@ -22,7 +22,8 @@ import threading
from pubsub import pub # type: ignore[import-untyped]
from pytap2 import TapDevice
from meshtastic import portnums_pb2, mt_config
from meshtastic.protobuf import portnums_pb2
from meshtastic import mt_config
from meshtastic.util import ipstr, readnet_u16