Linter config improvements, code style fixes
This commit is contained in:
parent
760f80fb49
commit
3ebf88d0f7
|
@ -2,8 +2,7 @@
|
||||||
# SPDX-License-Identifier: GPL-3.0-only
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
import argparse
|
import argparse
|
||||||
import gi
|
import importlib.resources as resources
|
||||||
import gpxpy
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import signal
|
import signal
|
||||||
|
@ -12,26 +11,28 @@ import time
|
||||||
import tokenize
|
import tokenize
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import importlib.resources as resources
|
import gi
|
||||||
|
import gpxpy
|
||||||
|
|
||||||
import satellite.nmea as nmea
|
import satellite.nmea as nmea
|
||||||
import satellite.quectel as quectel
|
import satellite.quectel as quectel
|
||||||
|
from satellite import __version__
|
||||||
|
|
||||||
from .mm_pydbus_source import QuectelNmeaSource
|
from .mm_pydbus_source import QuectelNmeaSource
|
||||||
from .nmeasource import (
|
from .nmeasource import (
|
||||||
ModemNoNMEAError,
|
|
||||||
ModemLockedError,
|
|
||||||
ModemError,
|
|
||||||
NmeaSourceNotFoundError,
|
|
||||||
GnssShareNmeaSource,
|
GnssShareNmeaSource,
|
||||||
|
ModemError,
|
||||||
|
ModemLockedError,
|
||||||
|
ModemNoNMEAError,
|
||||||
|
NmeaSourceNotFoundError,
|
||||||
)
|
)
|
||||||
from .util import bearing_to_arrow, have_touchscreen, now, unique_filename
|
from .util import bearing_to_arrow, have_touchscreen, now, unique_filename
|
||||||
from .widgets import text_barchart, DataFrame
|
from .widgets import DataFrame, text_barchart
|
||||||
from satellite import __version__
|
|
||||||
|
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
gi.require_version('Gdk', '3.0')
|
gi.require_version('Gdk', '3.0')
|
||||||
gi.require_version('Handy', '1')
|
gi.require_version('Handy', '1')
|
||||||
from gi.repository import Gdk, Gio, GLib, Gtk, Handy # noqa: E402
|
from gi.repository import GLib, Gdk, Gio, Gtk, Handy # noqa: E402, I100
|
||||||
|
|
||||||
appname = 'Satellite'
|
appname = 'Satellite'
|
||||||
app_id = 'page.codeberg.tpikonen.satellite'
|
app_id = 'page.codeberg.tpikonen.satellite'
|
||||||
|
@ -54,9 +55,9 @@ class SatelliteApp(Gtk.Application):
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-s', '--source', dest='source',
|
'-s', '--source', dest='source',
|
||||||
default='quectel',
|
default='quectel',
|
||||||
help='Select NMEA source. Options are '
|
help="Select NMEA source. Options are "
|
||||||
'\'quectel\' (default) for Quectel Modems or '
|
"\'quectel\' (default) for Quectel Modems or "
|
||||||
'\'gnss-share\' when using gnss-share')
|
"\'gnss-share\' when using gnss-share")
|
||||||
self.args = parser.parse_args()
|
self.args = parser.parse_args()
|
||||||
|
|
||||||
GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, signal.SIGINT,
|
GLib.unix_signal_add(GLib.PRIORITY_DEFAULT, signal.SIGINT,
|
||||||
|
@ -90,7 +91,7 @@ class SatelliteApp(Gtk.Application):
|
||||||
|
|
||||||
self.source = None
|
self.source = None
|
||||||
|
|
||||||
self.infolabel.set_markup("<tt>" + "\n"*10 + "</tt>")
|
self.infolabel.set_markup("<tt>" + "\n" * 10 + "</tt>")
|
||||||
|
|
||||||
self.dataframe = DataFrame()
|
self.dataframe = DataFrame()
|
||||||
# self.dataframe.header.set_text("Satellite info")
|
# self.dataframe.header.set_text("Satellite info")
|
||||||
|
@ -175,7 +176,6 @@ class SatelliteApp(Gtk.Application):
|
||||||
GLib.timeout_add(1000, self.init_source, None)
|
GLib.timeout_add(1000, self.init_source, None)
|
||||||
|
|
||||||
def on_shutdown(self, app):
|
def on_shutdown(self, app):
|
||||||
"""Called after main loop exits."""
|
|
||||||
print("Cleaning up...")
|
print("Cleaning up...")
|
||||||
self.gpx_write()
|
self.gpx_write()
|
||||||
if self.source is not None:
|
if self.source is not None:
|
||||||
|
@ -418,16 +418,14 @@ class SatelliteApp(Gtk.Application):
|
||||||
("mode_indicator", "Modes (GP,GL,GA)", lambda x: str(x)),
|
("mode_indicator", "Modes (GP,GL,GA)", lambda x: str(x)),
|
||||||
("actives", "Active / in use sats", get_actives),
|
("actives", "Active / in use sats", get_actives),
|
||||||
("visibles", "Receiving sats", lambda x: str(len(
|
("visibles", "Receiving sats", lambda x: str(len(
|
||||||
list(r for r in x if r['snr'] > 0.0)))),
|
[r for r in x if r['snr'] > 0.0]))),
|
||||||
("visibles", "Visible sats", lambda x: str(len(x))),
|
("visibles", "Visible sats", lambda x: str(len(x))),
|
||||||
# ("fixage", "Age of fix", lambda x: to_str(x, "%0.0f s")),
|
# ("fixage", "Age of fix", lambda x: to_str(x, "%0.0f s")),
|
||||||
("fixage", "Age of update / fix", get_ages),
|
("fixage", "Age of update / fix", get_ages),
|
||||||
("systime", "Sys. Time", lambda x: x.strftime(utcfmt)),
|
("systime", "Sys. Time", lambda x: x.strftime(utcfmt)),
|
||||||
("latlon", "Latitude",
|
("latlon", "Latitude", lambda x: "%0.6f" % x[0] if x else "-"),
|
||||||
lambda x: "%0.6f" % x[0] if x else "-"),
|
("latlon", "Longitude", lambda x: "%0.6f" % x[1] if x else "-"),
|
||||||
("latlon", "Longitude",
|
("altitude", "Altitude", lambda x: to_str(x, "%0.1f m")),
|
||||||
lambda x: "%0.6f" % x[1] if x else "-"),
|
|
||||||
("altitude", "Altitude", lambda x: to_str(x, "%0.1f m")),
|
|
||||||
# ("fixtime", "Time of fix",
|
# ("fixtime", "Time of fix",
|
||||||
# lambda x: x.strftime(utcfmt) if x else "-"),
|
# lambda x: x.strftime(utcfmt) if x else "-"),
|
||||||
# ("date", "Date of fix",
|
# ("date", "Date of fix",
|
||||||
|
@ -471,10 +469,9 @@ class SatelliteApp(Gtk.Application):
|
||||||
self.last_mode = mode
|
self.last_mode = mode
|
||||||
|
|
||||||
def set_speedlabel(self, speed, bearing=None):
|
def set_speedlabel(self, speed, bearing=None):
|
||||||
spd = str(int(3.6*speed)) if speed else "-"
|
spd = str(int(3.6 * speed)) if speed else "-"
|
||||||
arrow = bearing_to_arrow(bearing) if bearing is not None else ""
|
arrow = bearing_to_arrow(bearing) if bearing is not None else ""
|
||||||
speedfmt = ('<span size="50000">%s%s</span>\n' +
|
speedfmt = '<span size="50000">%s%s</span>\n<span size="30000">%s</span>'
|
||||||
'<span size="30000">%s</span>')
|
|
||||||
speedstr = speedfmt % (spd, arrow, "km/h")
|
speedstr = speedfmt % (spd, arrow, "km/h")
|
||||||
self.speedlabel.set_markup(speedstr)
|
self.speedlabel.set_markup(speedstr)
|
||||||
|
|
||||||
|
|
|
@ -2,18 +2,19 @@
|
||||||
# SPDX-License-Identifier: GPL-3.0-only
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
import re
|
import re
|
||||||
import satellite.modem_manager_defs as mm
|
|
||||||
from satellite.nmeasource import (
|
|
||||||
NmeaSource,
|
|
||||||
NmeaSourceNotFoundError,
|
|
||||||
ModemError,
|
|
||||||
ModemLockedError,
|
|
||||||
ModemNoNMEAError,
|
|
||||||
)
|
|
||||||
|
|
||||||
from pydbus import SystemBus
|
from pydbus import SystemBus
|
||||||
from pynmea2.nmea import NMEASentence
|
from pynmea2.nmea import NMEASentence
|
||||||
|
|
||||||
|
import satellite.modem_manager_defs as mm
|
||||||
|
from satellite.nmeasource import (
|
||||||
|
ModemError,
|
||||||
|
ModemLockedError,
|
||||||
|
ModemNoNMEAError,
|
||||||
|
NmeaSource,
|
||||||
|
NmeaSourceNotFoundError,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ModemManagerPyDBusNmeaSource(NmeaSource):
|
class ModemManagerPyDBusNmeaSource(NmeaSource):
|
||||||
|
|
||||||
|
@ -105,12 +106,12 @@ class QuectelNmeaSource(ModemManagerPyDBusNmeaSource):
|
||||||
return self.fix_talker(super()._really_get())
|
return self.fix_talker(super()._really_get())
|
||||||
|
|
||||||
def fix_talker(self, nmeas):
|
def fix_talker(self, nmeas):
|
||||||
pq_re = re.compile(r'''
|
pq_re = re.compile(r"""
|
||||||
^\s*\$?
|
^\s*\$?
|
||||||
(?P<talker>PQ)
|
(?P<talker>PQ)
|
||||||
(?P<sentence>\w{3})
|
(?P<sentence>\w{3})
|
||||||
(?P<data>[^*]*)
|
(?P<data>[^*]*)
|
||||||
(?:[*](?P<checksum>[A-F0-9]{2}))$''', re.VERBOSE)
|
(?:[*](?P<checksum>[A-F0-9]{2}))$""", re.VERBOSE)
|
||||||
out = []
|
out = []
|
||||||
for nmea in (n for n in nmeas.split('\r\n') if n):
|
for nmea in (n for n in nmeas.split('\r\n') if n):
|
||||||
mo = pq_re.match(nmea)
|
mo = pq_re.match(nmea)
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
# SPDX-License-Identifier: GPL-3.0-only
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
import datetime
|
import datetime
|
||||||
import pynmea2
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
|
import pynmea2
|
||||||
|
|
||||||
MS_PER_KNOT = 0.514444
|
MS_PER_KNOT = 0.514444
|
||||||
|
|
||||||
lastfix_dt = None
|
lastfix_dt = None
|
||||||
|
@ -61,9 +62,9 @@ def get_latlon(mdict):
|
||||||
lat_min = float(lat[2:])
|
lat_min = float(lat[2:])
|
||||||
lon_deg = float(lon[:3])
|
lon_deg = float(lon[:3])
|
||||||
lon_min = float(lon[3:])
|
lon_min = float(lon[3:])
|
||||||
flat = lat_deg + lat_min/60
|
flat = lat_deg + lat_min / 60
|
||||||
flat = -1 * flat if lat_dir == 'S' else flat
|
flat = -1 * flat if lat_dir == 'S' else flat
|
||||||
flon = lon_deg + lon_min/60
|
flon = lon_deg + lon_min / 60
|
||||||
flon = -1 * flon if lon_dir == 'W' else flon
|
flon = -1 * flon if lon_dir == 'W' else flon
|
||||||
return (flat, flon)
|
return (flat, flon)
|
||||||
|
|
||||||
|
@ -182,7 +183,7 @@ def parse(nmeas, always_add_prefix=False):
|
||||||
return float(s) if s else empty_val
|
return float(s) if s else empty_val
|
||||||
|
|
||||||
def add_prn_prefix(prns, talker, always=always_add_prefix):
|
def add_prn_prefix(prns, talker, always=always_add_prefix):
|
||||||
"""Add constellation prefix to PRN string"""
|
"""Add constellation prefix to PRN string."""
|
||||||
beidou_prefix = "C"
|
beidou_prefix = "C"
|
||||||
galileo_prefix = "E"
|
galileo_prefix = "E"
|
||||||
glonass_prefix = "R"
|
glonass_prefix = "R"
|
||||||
|
@ -227,7 +228,7 @@ def parse(nmeas, always_add_prefix=False):
|
||||||
'snr': fl(getattr(msg, f'snr_{n}', None), 0.0),
|
'snr': fl(getattr(msg, f'snr_{n}', None), 0.0),
|
||||||
})
|
})
|
||||||
elif isinstance(msg, pynmea2.types.GSA):
|
elif isinstance(msg, pynmea2.types.GSA):
|
||||||
for n in range(1, 12+1):
|
for n in range(1, 12 + 1):
|
||||||
prns = getattr(msg, f'sv_id{n:02d}')
|
prns = getattr(msg, f'sv_id{n:02d}')
|
||||||
if prns and prns.isdigit():
|
if prns and prns.isdigit():
|
||||||
actives.append(add_prn_prefix(prns, msg.talker))
|
actives.append(add_prn_prefix(prns, msg.talker))
|
||||||
|
|
|
@ -2,7 +2,6 @@
|
||||||
# SPDX-License-Identifier: GPL-3.0-only
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from .util import (
|
from .util import (
|
||||||
|
|
|
@ -1,11 +1,10 @@
|
||||||
# Copyright 2021-2022 Teemu Ikonen
|
# Copyright 2021-2022 Teemu Ikonen
|
||||||
# SPDX-License-Identifier: GPL-3.0-only
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
import gi
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
|
import gi
|
||||||
gi.require_version('Gdk', '3.0')
|
gi.require_version('Gdk', '3.0')
|
||||||
from gi.repository import Gdk # noqa: E402
|
from gi.repository import Gdk # noqa: E402
|
||||||
|
|
||||||
|
@ -16,15 +15,13 @@ week_now = int((now.timestamp() - gps_epoch.timestamp()) / one_week)
|
||||||
|
|
||||||
|
|
||||||
def have_touchscreen():
|
def have_touchscreen():
|
||||||
"""Return True if the default seat of default display has touch capability
|
"""Return True if the default seat of default display has touch capability."""
|
||||||
"""
|
|
||||||
return bool(Gdk.Display.get_default_seat(
|
return bool(Gdk.Display.get_default_seat(
|
||||||
Gdk.Display.get_default()).get_capabilities() & Gdk.SeatCapabilities.TOUCH)
|
Gdk.Display.get_default()).get_capabilities() & Gdk.SeatCapabilities.TOUCH)
|
||||||
|
|
||||||
|
|
||||||
def datetime_from_gpstime(week, millisecs, fix_week=False):
|
def datetime_from_gpstime(week, millisecs, fix_week=False):
|
||||||
"""Return a datetime object formed from GPS week number and
|
"""Return a datetime from GPS week number and milliseconds from week start.
|
||||||
milliseconds from week start.
|
|
||||||
|
|
||||||
If fix_week is True, set the bits above 10 in week number from
|
If fix_week is True, set the bits above 10 in week number from
|
||||||
current date, see
|
current date, see
|
||||||
|
@ -38,7 +35,7 @@ def datetime_from_gpstime(week, millisecs, fix_week=False):
|
||||||
|
|
||||||
|
|
||||||
def gpstime_from_datetime(dt):
|
def gpstime_from_datetime(dt):
|
||||||
"""Return a (gps_week, millisec) tuple from a datetime object"""
|
"""Return a (gps_week, millisec) tuple from a datetime object."""
|
||||||
if dt < gps_epoch:
|
if dt < gps_epoch:
|
||||||
raise ValueError("Time cannot be less than GPS epoch")
|
raise ValueError("Time cannot be less than GPS epoch")
|
||||||
ts = dt.timestamp()
|
ts = dt.timestamp()
|
||||||
|
@ -51,7 +48,7 @@ def gpstime_from_datetime(dt):
|
||||||
def unique_filename(namestem, ext, timestamp=False):
|
def unique_filename(namestem, ext, timestamp=False):
|
||||||
if timestamp:
|
if timestamp:
|
||||||
namestem += "-" + datetime.now().isoformat(
|
namestem += "-" + datetime.now().isoformat(
|
||||||
'_', 'seconds').replace(':', '.')
|
'_', 'seconds').replace(':', '.')
|
||||||
name = None
|
name = None
|
||||||
for count in ('~%d' % n if n > 0 else '' for n in range(100)):
|
for count in ('~%d' % n if n > 0 else '' for n in range(100)):
|
||||||
test = namestem + count + ext
|
test = namestem + count + ext
|
||||||
|
@ -77,7 +74,7 @@ def bearing_to_arrow(bearing):
|
||||||
'\u2196',
|
'\u2196',
|
||||||
'\u2191',
|
'\u2191',
|
||||||
]
|
]
|
||||||
edges = list(22.5 + 45.0 * n for n in range(0, 8)) + [360.0]
|
edges = [22.5 + 45.0 * n for n in range(0, 8)] + [360.0]
|
||||||
|
|
||||||
angle = bearing - (bearing // 360) * 360
|
angle = bearing - (bearing // 360) * 360
|
||||||
index = next(ind for (ind, e) in enumerate(edges) if angle < e)
|
index = next(ind for (ind, e) in enumerate(edges) if angle < e)
|
||||||
|
|
|
@ -1,10 +1,9 @@
|
||||||
# Copyright 2021-2022 Teemu Ikonen
|
# Copyright 2021-2022 Teemu Ikonen
|
||||||
# SPDX-License-Identifier: GPL-3.0-only
|
# SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
|
||||||
import gi
|
|
||||||
|
|
||||||
import importlib.resources as resources
|
import importlib.resources as resources
|
||||||
|
|
||||||
|
import gi
|
||||||
gi.require_version('Gtk', '3.0')
|
gi.require_version('Gtk', '3.0')
|
||||||
gi.require_version('Gdk', '3.0')
|
gi.require_version('Gdk', '3.0')
|
||||||
from gi.repository import Gtk # noqa: E402
|
from gi.repository import Gtk # noqa: E402
|
||||||
|
@ -18,8 +17,7 @@ def text_barchart(data, highlights, height=None, width=30):
|
||||||
height Number of lines in the generated bar chart
|
height Number of lines in the generated bar chart
|
||||||
width Width of the generated bar chart in chars
|
width Width of the generated bar chart in chars
|
||||||
"""
|
"""
|
||||||
sdata = list((d[0] if d[0] else '',
|
sdata = [(d[0] if d[0] else '', int(d[1]) if d[1] else 0) for d in data]
|
||||||
int(d[1]) if d[1] else 0) for d in data)
|
|
||||||
sdata.sort(key=lambda x: x[1], reverse=True)
|
sdata.sort(key=lambda x: x[1], reverse=True)
|
||||||
|
|
||||||
dstr = ''
|
dstr = ''
|
||||||
|
@ -41,14 +39,14 @@ def text_barchart(data, highlights, height=None, width=30):
|
||||||
cmax_xaxis = cmaxbar + 3
|
cmax_xaxis = cmaxbar + 3
|
||||||
for d in sdata[:barlines]:
|
for d in sdata[:barlines]:
|
||||||
block = '\u2585' if d[0] in highlights else '='
|
block = '\u2585' if d[0] in highlights else '='
|
||||||
dstr += "%3s\u2502%s %d\n" % (d[0], block*int(scale*d[1]), d[1])
|
dstr += "%3s\u2502%s %d\n" % (d[0], block * int(scale * d[1]), d[1])
|
||||||
if barlines < len(sdata):
|
if barlines < len(sdata):
|
||||||
dstr += " \u256a\n"
|
dstr += " \u256a\n"
|
||||||
elif (len(sdata) - axislines) < height:
|
elif (len(sdata) - axislines) < height:
|
||||||
# Add empty lines to y-axis
|
# Add empty lines to y-axis
|
||||||
dstr += ' \u2502\n' * (height - len(sdata) - axislines)
|
dstr += ' \u2502\n' * (height - len(sdata) - axislines)
|
||||||
dstr += " \u251c" + '\u2500'*(cmax_xaxis) + '\u2524\n'
|
dstr += " \u251c" + '\u2500' * (cmax_xaxis) + '\u2524\n'
|
||||||
dstr += " 0" + ' '*(cmax_xaxis - 1) + str(max_xaxis)
|
dstr += " 0" + ' ' * (cmax_xaxis - 1) + str(max_xaxis)
|
||||||
return dstr
|
return dstr
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue