Skip to content

Commit 75732a6

Browse files
committed
Load plugins directly
1 parent 3b9ede8 commit 75732a6

8 files changed

+43
-221
lines changed

plugin_loader.py

+26-28
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,34 @@
1-
import os
2-
import sys
3-
import importlib
4-
from pathlib import Path
1+
from plugins.health_plugin import Plugin as HealthPlugin
2+
from plugins.map_plugin import Plugin as MapPlugin
3+
from plugins.mesh_relay_plugin import Plugin as MeshRelayPlugin
4+
from plugins.ping_plugin import Plugin as PingPlugin
5+
from plugins.telemetry_plugin import Plugin as TelemetryPlugin
6+
from plugins.weather_plugin import Plugin as WeatherPlugin
7+
58
from log_utils import get_logger
69

710
logger = get_logger(name="Plugins")
811

9-
plugins = []
12+
active_plugins = []
1013

1114

1215
def load_plugins():
1316
global plugins
14-
if plugins:
15-
return plugins
16-
17-
plugins = []
18-
plugin_dirs = [Path("plugins")]
19-
20-
for plugin_folder in plugin_dirs:
21-
sys.path.insert(0, str(plugin_folder.resolve()))
22-
23-
for plugin_file in plugin_folder.glob("*.py"):
24-
plugin_name = plugin_file.stem
25-
if plugin_name == "__init__":
26-
continue
27-
plugin_module = importlib.import_module(plugin_name)
28-
if hasattr(plugin_module, "Plugin"):
29-
plugin = plugin_module.Plugin()
30-
if plugin.config["active"]:
31-
logger.info(
32-
f"Loaded {os.path.basename(plugin_folder)}/{plugin_name}"
33-
)
34-
plugins.append(plugin)
35-
36-
return plugins
17+
if active_plugins:
18+
return active_plugins
19+
20+
plugins = [
21+
HealthPlugin(),
22+
MapPlugin(),
23+
MeshRelayPlugin(),
24+
PingPlugin(),
25+
TelemetryPlugin(),
26+
WeatherPlugin(),
27+
]
28+
29+
for plugin in plugins:
30+
if plugin.config["active"]:
31+
logger.info(f"Loaded {plugin.plugin_name}")
32+
active_plugins.append(plugin)
33+
34+
return active_plugins

plugins/base_plugin.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
get_plugin_data_for_node,
88
delete_plugin_data,
99
)
10-
from matrix_utils import bot_command
1110

1211

1312
class BasePlugin(ABC):
@@ -44,6 +43,8 @@ def get_data(self):
4443
return get_plugin_data(self.plugin_name)
4544

4645
def matches(self, payload):
46+
from matrix_utils import bot_command
47+
4748
if type(payload) == str:
4849
return bot_command(self.plugin_name, payload)
4950
return False

plugins/health_plugin.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
import re
22
import statistics
3-
from base_plugin import BasePlugin
4-
5-
from matrix_utils import connect_matrix
6-
from meshtastic_utils import connect_meshtastic
3+
from plugins.base_plugin import BasePlugin
74

85

96
class Plugin(BasePlugin):
107
plugin_name = "health"
118

129
def generate_response(self):
10+
from meshtastic_utils import connect_meshtastic
11+
1312
meshtastic_client = connect_meshtastic()
1413
battery_levels = []
1514
air_util_tx = []
@@ -44,6 +43,8 @@ async def handle_meshtastic_message(
4443
return False
4544

4645
async def handle_room_message(self, room, event, full_message):
46+
from matrix_utils import connect_matrix
47+
4748
full_message = full_message.strip()
4849
if not self.matches(full_message):
4950
return False

plugins/map_plugin.py

+4-5
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,7 @@
55
import re
66
from PIL import Image
77
from nio import AsyncClient, UploadResponse
8-
from base_plugin import BasePlugin
9-
10-
11-
from matrix_utils import connect_matrix
12-
from meshtastic_utils import connect_meshtastic
8+
from plugins.base_plugin import BasePlugin
139

1410

1511
def anonymize_location(lat, lon, radius=1000):
@@ -93,6 +89,9 @@ async def handle_room_message(self, room, event, full_message):
9389
if not self.matches(full_message):
9490
return False
9591

92+
from matrix_utils import connect_matrix
93+
from meshtastic_utils import connect_meshtastic
94+
9695
matrix_client = await connect_matrix()
9796
meshtastic_client = connect_meshtastic()
9897

plugins/mesh_relay_plugin.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@
88

99
from plugins.base_plugin import BasePlugin
1010
from config import relay_config
11-
from matrix_utils import connect_matrix
12-
from meshtastic_utils import connect_meshtastic
1311

1412
matrix_rooms: List[dict] = relay_config["matrix_rooms"]
1513

@@ -57,6 +55,8 @@ def process(self, packet):
5755
async def handle_meshtastic_message(
5856
self, packet, formatted_message, longname, meshnet_name
5957
):
58+
from matrix_utils import connect_matrix
59+
6060
packet = self.process(packet)
6161
matrix_client = await connect_matrix()
6262

@@ -121,6 +121,8 @@ async def handle_room_message(self, room, event, full_message):
121121
self.logger.error(f"Error processing embedded packet: {e}")
122122
return
123123

124+
from meshtastic_utils import connect_meshtastic
125+
124126
meshtastic_client = connect_meshtastic()
125127
meshPacket = mesh_pb2.MeshPacket()
126128
meshPacket.channel = channel

plugins/ping.py

-43
This file was deleted.

plugins/telemetry.py

-136
This file was deleted.

plugins/weather_plugin.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
import requests
33

44
from plugins.base_plugin import BasePlugin
5-
from matrix_utils import connect_matrix
6-
from meshtastic_utils import connect_meshtastic
75

86

97
class Plugin(BasePlugin):
@@ -80,6 +78,8 @@ async def handle_meshtastic_message(
8078
if f"!{self.plugin_name}" not in message:
8179
return False
8280

81+
from meshtastic_utils import connect_meshtastic
82+
8383
meshtastic_client = connect_meshtastic()
8484
if packet["fromId"] in meshtastic_client.nodes:
8585
weather_notice = "Cannot determine location"

0 commit comments

Comments
 (0)