From 4ed04658031a77cf51046f451a7354e6e5ddcc6c Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Fri, 2 Apr 2021 11:03:00 +0800 Subject: [PATCH] format per coding standards --- meshtastic/__init__.py | 32 ++++++-------------------------- meshtastic/__main__.py | 5 ++++- meshtastic/util.py | 24 +++++++++++++++++++++--- 3 files changed, 31 insertions(+), 30 deletions(-) diff --git a/meshtastic/__init__.py b/meshtastic/__init__.py index 3b25739..5af04c5 100644 --- a/meshtastic/__init__.py +++ b/meshtastic/__init__.py @@ -68,7 +68,7 @@ import base64 import platform import socket from . import mesh_pb2, portnums_pb2, apponly_pb2, admin_pb2, environmental_measurement_pb2, remote_hardware_pb2, channel_pb2, radioconfig_pb2, util -from .util import fixme, catchAndIgnore, stripnl, DeferredExecution +from .util import fixme, catchAndIgnore, stripnl, DeferredExecution, Timeout from pubsub import pub from dotmap import DotMap from typing import * @@ -115,26 +115,6 @@ class KnownProtocol(NamedTuple): onReceive: Callable = None -class Timeout: - def __init__(self, maxSecs = 20): - self.expireTime = 0 - self.sleepInterval = 0.1 - self.expireTimeout = maxSecs - - def reset(self): - """Restart the waitForSet timer""" - self.expireTime = time.time() + self.expireTimeout - - def waitForSet(self, target, attrs=()): - """Block until the specified attributes are set. Returns True if config has been received.""" - self.reset() - while time.time() < self.expireTime: - if all(map(lambda a: getattr(target, a, None), attrs)): - return True - time.sleep(self.sleepInterval) - return False - - def pskToString(psk: bytes): """Given an array of PSK bytes, decode them into a human readable (but privacy protecting) string""" if len(psk) == 0: @@ -163,7 +143,7 @@ class Node: self.nodeNum = nodeNum self.radioConfig = None self.channels = None - self._timeout = Timeout(maxSecs = 60) + self._timeout = Timeout(maxSecs=60) def showChannels(self): """Show human readable description of our channels""" @@ -348,7 +328,7 @@ class Node: """A closure to handle the response packet""" self.radioConfig = p["decoded"]["admin"]["raw"].get_radio_response logging.debug("Received radio config, now fetching channels...") - self._timeout.reset() # We made foreward progress + self._timeout.reset() # We made foreward progress self._requestChannel(0) # now start fetching channels # Show progress message for super slow operations @@ -418,7 +398,7 @@ class Node: """A closure to handle the response packet""" c = p["decoded"]["admin"]["raw"].get_channel_response self.partialChannels.append(c) - self._timeout.reset() # We made foreward progress + self._timeout.reset() # We made foreward progress logging.debug(f"Received channel {stripnl(c)}") index = c.index @@ -671,7 +651,7 @@ class MeshInterface: def waitForConfig(self): """Block until radio config is received. Returns True if config has been received.""" success = self._timeout.waitForSet(self, attrs=('myInfo', 'nodes') - ) and self.localNode.waitForConfig() + ) and self.localNode.waitForConfig() if not success: raise Exception("Timed out waiting for interface config") @@ -1231,7 +1211,7 @@ class TCPInterface(StreamInterface): try: self.socket.shutdown(socket.SHUT_RDWR) except: - pass # Ignore errors in shutdown, because we might have a race with the server + pass # Ignore errors in shutdown, because we might have a race with the server self.socket.close() def _writeBytes(self, b): diff --git a/meshtastic/__main__.py b/meshtastic/__main__.py index 7f3ebd6..636de12 100644 --- a/meshtastic/__main__.py +++ b/meshtastic/__main__.py @@ -139,6 +139,7 @@ def getTimeAgo(ts, default="N/A"): # Print Nodes + def printNodes(nodes, myId): # Create the table and define the structure tableData = [] @@ -151,7 +152,8 @@ def printNodes(nodes, myId): lat = formatFloat(node['position'].get("latitude"), "{:.4f}", "°") lon = formatFloat(node['position'].get("longitude"), "{:.4f}", "°") alt = formatFloat(node['position'].get("altitude"), "{:.0f}", " m") - batt = formatFloat(node['position'].get("batteryLevel"), "{:.2f}", "%") + batt = formatFloat(node['position'].get( + "batteryLevel"), "{:.2f}", "%") snr = formatFloat(node.get("snr"), "{:.2f}", " dB") LH = getLH(node.get("lastHeard")) timeAgo = getTimeAgo(node.get("lastHeard")) @@ -168,6 +170,7 @@ def printNodes(nodes, myId): print(tabulate(RowsOk, headers='keys', tablefmt='fancy_grid')) + def setPref(attributes, name, valStr): """Set a channel or preferences value""" diff --git a/meshtastic/util.py b/meshtastic/util.py index decccc5..1ad43b1 100644 --- a/meshtastic/util.py +++ b/meshtastic/util.py @@ -3,9 +3,7 @@ from collections import defaultdict import serial import serial.tools.list_ports from queue import Queue -import threading -import sys -import logging +import threading, sys, time, logging """Some devices such as a seger jlink we never want to accidentally open""" blacklistVids = dict.fromkeys([0x1366]) @@ -49,6 +47,26 @@ class dotdict(dict): __delattr__ = dict.__delitem__ +class Timeout: + def __init__(self, maxSecs=20): + self.expireTime = 0 + self.sleepInterval = 0.1 + self.expireTimeout = maxSecs + + def reset(self): + """Restart the waitForSet timer""" + self.expireTime = time.time() + self.expireTimeout + + def waitForSet(self, target, attrs=()): + """Block until the specified attributes are set. Returns True if config has been received.""" + self.reset() + while time.time() < self.expireTime: + if all(map(lambda a: getattr(target, a, None), attrs)): + return True + time.sleep(self.sleepInterval) + return False + + class DeferredExecution(): """A thread that accepts closures to run, and runs them as they are received"""