mirror of
https://github.com/smittix/intercept.git
synced 2026-04-23 22:30:00 -07:00
Fix ruff lint errors to unblock CI (import sorting, unused imports, style)
This commit is contained in:
@@ -20,12 +20,12 @@ def register_blueprints(app):
|
||||
from .correlation import correlation_bp
|
||||
from .dsc import dsc_bp
|
||||
from .gps import gps_bp
|
||||
from .ground_station import ground_station_bp
|
||||
from .listening_post import receiver_bp
|
||||
from .meshtastic import meshtastic_bp
|
||||
from .meteor_websocket import meteor_bp
|
||||
from .morse import morse_bp
|
||||
from .offline import offline_bp
|
||||
from .ground_station import ground_station_bp
|
||||
from .ook import ook_bp
|
||||
from .pager import pager_bp
|
||||
from .radiosonde import radiosonde_bp
|
||||
|
||||
@@ -728,8 +728,9 @@ def agent_management_page():
|
||||
@controller_bp.route('/monitor')
|
||||
def network_monitor_page():
|
||||
"""Render the network monitor page for multi-agent aggregated view."""
|
||||
from flask import render_template
|
||||
from config import VERSION
|
||||
from flask import render_template
|
||||
|
||||
from config import VERSION
|
||||
return render_template('network_monitor.html', version=VERSION)
|
||||
|
||||
|
||||
|
||||
@@ -11,7 +11,6 @@ from __future__ import annotations
|
||||
|
||||
import json
|
||||
import queue
|
||||
import threading
|
||||
from pathlib import Path
|
||||
|
||||
from flask import Blueprint, Response, jsonify, request, send_file
|
||||
@@ -102,6 +101,8 @@ def update_profile(norad_id: int):
|
||||
data = request.get_json(force=True) or {}
|
||||
from utils.ground_station.observation_profile import (
|
||||
get_profile as _get,
|
||||
)
|
||||
from utils.ground_station.observation_profile import (
|
||||
legacy_decoder_to_tasks,
|
||||
normalize_tasks,
|
||||
save_profile,
|
||||
@@ -443,7 +444,6 @@ def init_ground_station_websocket(app) -> None:
|
||||
@sock.route('/ws/satellite_waterfall')
|
||||
def satellite_waterfall_ws(ws):
|
||||
"""Stream binary waterfall frames from the active ground station IQ bus."""
|
||||
import app as _app_mod
|
||||
scheduler = _get_scheduler()
|
||||
wf_queue = scheduler.waterfall_queue
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ def find_auto_rx() -> str | None:
|
||||
def _resolve_shebang_interpreter(script_path: str) -> str | None:
|
||||
"""Resolve a Python interpreter from a script shebang if possible."""
|
||||
try:
|
||||
with open(script_path, 'r', encoding='utf-8', errors='ignore') as handle:
|
||||
with open(script_path, encoding='utf-8', errors='ignore') as handle:
|
||||
first_line = handle.readline().strip()
|
||||
except OSError:
|
||||
return None
|
||||
|
||||
@@ -12,7 +12,6 @@ import requests
|
||||
from flask import Blueprint, Response, jsonify, make_response, render_template, request
|
||||
|
||||
from config import SHARED_OBSERVER_LOCATION_ENABLED
|
||||
from utils.sse import sse_stream_fanout
|
||||
from data.satellites import TLE_SATELLITES
|
||||
from utils.database import (
|
||||
add_tracked_satellite,
|
||||
@@ -23,6 +22,7 @@ from utils.database import (
|
||||
)
|
||||
from utils.logging import satellite_logger as logger
|
||||
from utils.responses import api_error
|
||||
from utils.sse import sse_stream_fanout
|
||||
from utils.validation import validate_elevation, validate_hours, validate_latitude, validate_longitude
|
||||
|
||||
satellite_bp = Blueprint('satellite', __name__, url_prefix='/satellite')
|
||||
@@ -55,6 +55,7 @@ _TRACK_CACHE_TTL = 1800
|
||||
|
||||
# Thread pool for background ground-track computation (non-blocking from 1Hz tracker loop)
|
||||
from concurrent.futures import ThreadPoolExecutor as _ThreadPoolExecutor
|
||||
|
||||
_track_executor = _ThreadPoolExecutor(max_workers=2, thread_name_prefix='sat-track')
|
||||
_track_in_progress: set = set() # cache keys currently being computed
|
||||
_pass_cache: dict = {}
|
||||
@@ -726,6 +727,7 @@ def get_transmitters_endpoint(norad_id: int):
|
||||
def parse_packet():
|
||||
"""Parse a raw satellite telemetry packet (base64-encoded)."""
|
||||
import base64
|
||||
|
||||
from utils.satellite_telemetry import auto_parse
|
||||
data = request.json or {}
|
||||
try:
|
||||
|
||||
16
semver.py
16
semver.py
@@ -7,8 +7,8 @@ dependency is missing from the target Python environment.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, replace
|
||||
import re
|
||||
from dataclasses import dataclass, replace
|
||||
from typing import Iterable
|
||||
|
||||
_SEMVER_RE = re.compile(
|
||||
@@ -56,7 +56,7 @@ class VersionInfo:
|
||||
build: str | None = None
|
||||
|
||||
@classmethod
|
||||
def parse(cls, version: str) -> "VersionInfo":
|
||||
def parse(cls, version: str) -> VersionInfo:
|
||||
match = _SEMVER_RE.match(str(version))
|
||||
if not match:
|
||||
raise ValueError(f"{version!r} is not valid SemVer")
|
||||
@@ -77,25 +77,25 @@ class VersionInfo:
|
||||
def is_valid(cls, version: str) -> bool:
|
||||
return cls.isvalid(version)
|
||||
|
||||
def compare(self, other: str | "VersionInfo") -> int:
|
||||
def compare(self, other: str | VersionInfo) -> int:
|
||||
return compare(self, other)
|
||||
|
||||
def match(self, expr: str) -> bool:
|
||||
return match(str(self), expr)
|
||||
|
||||
def bump_major(self) -> "VersionInfo":
|
||||
def bump_major(self) -> VersionInfo:
|
||||
return VersionInfo(self.major + 1, 0, 0)
|
||||
|
||||
def bump_minor(self) -> "VersionInfo":
|
||||
def bump_minor(self) -> VersionInfo:
|
||||
return VersionInfo(self.major, self.minor + 1, 0)
|
||||
|
||||
def bump_patch(self) -> "VersionInfo":
|
||||
def bump_patch(self) -> VersionInfo:
|
||||
return VersionInfo(self.major, self.minor, self.patch + 1)
|
||||
|
||||
def finalize_version(self) -> "VersionInfo":
|
||||
def finalize_version(self) -> VersionInfo:
|
||||
return VersionInfo(self.major, self.minor, self.patch)
|
||||
|
||||
def replace(self, **changes) -> "VersionInfo":
|
||||
def replace(self, **changes) -> VersionInfo:
|
||||
return replace(self, **changes)
|
||||
|
||||
def __str__(self) -> str:
|
||||
|
||||
@@ -80,7 +80,6 @@ def test_tracker_position_has_no_observer_fields():
|
||||
receives the client's actual location, should emit elevation/azimuth/
|
||||
distance/visible.
|
||||
"""
|
||||
import sys
|
||||
from routes.satellite import _start_satellite_tracker
|
||||
|
||||
ISS_TLE = (
|
||||
|
||||
@@ -14,7 +14,7 @@ class SigMFConsumer:
|
||||
def __init__(
|
||||
self,
|
||||
metadata: SigMFMetadata,
|
||||
on_complete: 'callable | None' = None,
|
||||
on_complete: callable | None = None,
|
||||
):
|
||||
"""
|
||||
Args:
|
||||
|
||||
@@ -12,8 +12,6 @@ from __future__ import annotations
|
||||
import queue
|
||||
import time
|
||||
|
||||
import numpy as np
|
||||
|
||||
from utils.logging import get_logger
|
||||
from utils.waterfall_fft import (
|
||||
build_binary_frame,
|
||||
|
||||
@@ -113,9 +113,9 @@ class ObservationProfile:
|
||||
return tasks
|
||||
|
||||
@classmethod
|
||||
def from_row(cls, row) -> 'ObservationProfile':
|
||||
def from_row(cls, row) -> ObservationProfile:
|
||||
tasks = []
|
||||
raw_tasks = row['tasks_json'] if 'tasks_json' in row.keys() else None
|
||||
raw_tasks = row.get('tasks_json', None)
|
||||
if raw_tasks:
|
||||
try:
|
||||
tasks = normalize_tasks(json.loads(raw_tasks))
|
||||
|
||||
@@ -22,7 +22,6 @@ from __future__ import annotations
|
||||
import json
|
||||
import queue
|
||||
import threading
|
||||
import time
|
||||
import uuid
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
@@ -283,6 +282,7 @@ class GroundStationScheduler:
|
||||
) -> list[ScheduledObservation]:
|
||||
"""Predict passes for each profile and return ScheduledObservation list."""
|
||||
from skyfield.api import load, wgs84
|
||||
|
||||
from utils.satellite_predict import predict_passes as _predict_passes
|
||||
|
||||
try:
|
||||
@@ -525,8 +525,8 @@ class GroundStationScheduler:
|
||||
|
||||
def _attach_sigmf_consumer(self, bus, profile, obs_db_id: int | None) -> None:
|
||||
"""Attach a SigMFConsumer for raw IQ recording."""
|
||||
from utils.sigmf import SigMFMetadata
|
||||
from utils.ground_station.consumers.sigmf_writer import SigMFConsumer
|
||||
from utils.sigmf import SigMFMetadata
|
||||
|
||||
meta = SigMFMetadata(
|
||||
sample_rate=profile.iq_sample_rate,
|
||||
@@ -681,8 +681,9 @@ class GroundStationScheduler:
|
||||
|
||||
def _insert_observation_record(obs: ScheduledObservation, profile) -> int | None:
|
||||
try:
|
||||
from utils.database import get_db
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from utils.database import get_db
|
||||
with get_db() as conn:
|
||||
cur = conn.execute('''
|
||||
INSERT INTO ground_station_observations
|
||||
@@ -719,8 +720,9 @@ def _insert_event_record(obs_db_id: int | None, event_type: str, payload: str) -
|
||||
if obs_db_id is None:
|
||||
return
|
||||
try:
|
||||
from utils.database import get_db
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from utils.database import get_db
|
||||
with get_db() as conn:
|
||||
conn.execute('''
|
||||
INSERT INTO ground_station_events (observation_id, event_type, payload_json, timestamp)
|
||||
@@ -768,9 +770,10 @@ def _build_packet_event(payload, source: str) -> dict[str, Any]:
|
||||
|
||||
if parsed is None:
|
||||
try:
|
||||
from utils.satellite_telemetry import auto_parse
|
||||
import base64
|
||||
|
||||
from utils.satellite_telemetry import auto_parse
|
||||
|
||||
for token in text.replace(',', ' ').split():
|
||||
cleaned = token.strip()
|
||||
if not cleaned or len(cleaned) < 8:
|
||||
@@ -794,8 +797,9 @@ def _build_packet_event(payload, source: str) -> dict[str, Any]:
|
||||
|
||||
def _insert_recording_record(obs_db_id: int | None, meta_path: Path, data_path: Path, profile) -> None:
|
||||
try:
|
||||
from utils.database import get_db
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from utils.database import get_db
|
||||
size = data_path.stat().st_size if data_path.exists() else 0
|
||||
with get_db() as conn:
|
||||
conn.execute('''
|
||||
@@ -827,9 +831,10 @@ def _insert_output_record(
|
||||
metadata: dict[str, Any] | None = None,
|
||||
) -> int | None:
|
||||
try:
|
||||
from utils.database import get_db
|
||||
from datetime import datetime, timezone
|
||||
|
||||
from utils.database import get_db
|
||||
|
||||
with get_db() as conn:
|
||||
cur = conn.execute(
|
||||
'''
|
||||
|
||||
@@ -6,8 +6,6 @@ Uses Skyfield's find_events() for accurate AOS/TCA/LOS event detection.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime
|
||||
import math
|
||||
from typing import Any
|
||||
|
||||
from utils.logging import get_logger
|
||||
|
||||
@@ -12,11 +12,10 @@ views of raw binary data (hex dump, float32, uint16/32, strings).
|
||||
from __future__ import annotations
|
||||
|
||||
import math
|
||||
import struct
|
||||
import string
|
||||
import struct
|
||||
from datetime import datetime
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# AX.25 parser
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
@@ -22,13 +22,12 @@ from typing import Callable
|
||||
|
||||
import numpy as np
|
||||
|
||||
from utils.logging import get_logger
|
||||
|
||||
# DopplerTracker/DopplerInfo now live in the shared utils/doppler module.
|
||||
# Import them here so existing code that does
|
||||
# ``from utils.sstv.sstv_decoder import DopplerTracker``
|
||||
# continues to work unchanged.
|
||||
from utils.doppler import DopplerInfo, DopplerTracker # noqa: F401
|
||||
from utils.logging import get_logger
|
||||
|
||||
from .constants import ISS_SSTV_FREQ, SAMPLE_RATE
|
||||
from .dsp import goertzel_mag, normalize_audio
|
||||
|
||||
Reference in New Issue
Block a user