From 8b7b10b8fad3656d441a5d81b7654f0b32cfe22c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D1=82=D0=BE=D0=BD=20=D0=A2=D1=80=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Fri, 14 Aug 2026 10:24:24 +0300 Subject: [PATCH] Version 1.0.0; expose version in /api/status First published version. __version__ and pyproject bumped to 1.0.0, /api/status now returns 'version' so the PWA can check compatibility. Tests: 107 (status includes version, package version). --- pyproject.toml | 2 +- simtrace2_pysniff/__init__.py | 2 +- simtrace2_pysniff/server/server.py | 2 ++ tests/test_pcap_import.py | 34 ++++++++++++++++++++++++++++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index be95e6a..a954736 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.backends._legacy:_Backend" [project] name = "simtrace2-pysniff" -version = "0.1.0" +version = "1.0.0" description = "Python-based sniffing tool for SIMtrace2 hardware (SIM card communication sniffer)" readme = {file = "README.md", content-type = "text/markdown"} license = {text = "GPL-2.0-or-later"} diff --git a/simtrace2_pysniff/__init__.py b/simtrace2_pysniff/__init__.py index 061056b..c8e52d8 100644 --- a/simtrace2_pysniff/__init__.py +++ b/simtrace2_pysniff/__init__.py @@ -6,7 +6,7 @@ from .gsmtap import GsmtapSender, GsmtapReceiver from .pcap import PcapWriter from .dump import FileDumper, format_message -__version__ = '0.1.0' +__version__ = '1.0.0' __all__ = [ 'SniffSession', 'DeviceDisconnected', diff --git a/simtrace2_pysniff/server/server.py b/simtrace2_pysniff/server/server.py index 85c0bdf..ddb834f 100644 --- a/simtrace2_pysniff/server/server.py +++ b/simtrace2_pysniff/server/server.py @@ -13,6 +13,7 @@ from .database import Database from .capture import CaptureManager, GsmtapListener, DirectSniffer from ..gsmtap import build_gsmtap_packet, GSMTAP_SIM_ATR, GSMTAP_SIM_APDU from ..pcap import build_pcap, parse_pcap, parse_pcapng +from .. import __version__ def _content_disposition(filename): @@ -151,6 +152,7 @@ class RequestHandler(BaseHTTPRequestHandler): active_session = self.db.get_active_session() self._send_json({ 'server': 'simtrace-analyser-server', + 'version': __version__, 'capture_active': self.capture.active, 'session_id': self.capture.session_id, 'mode': active_session['mode'] if active_session else None, diff --git a/tests/test_pcap_import.py b/tests/test_pcap_import.py index 04d7d46..ced4e3a 100644 --- a/tests/test_pcap_import.py +++ b/tests/test_pcap_import.py @@ -137,5 +137,39 @@ class TestImportEndpoint(unittest.TestCase): self.assertEqual(h.db.count_sessions(), 0) +class TestVersion(unittest.TestCase): + def test_package_version(self): + from simtrace2_pysniff import __version__ + self.assertEqual(__version__, '1.0.0') + + def test_status_includes_version(self): + import os + from simtrace2_pysniff.server.server import RequestHandler + from simtrace2_pysniff.server.database import Database + from simtrace2_pysniff import __version__ + + class FakeCapture: + active = False + session_id = None + + class Fake(RequestHandler): + def __init__(self, db): + self.db = db + self.capture = FakeCapture() + self._json = None + + def _send_json(self, data, status=200): + self._json = data + + tmp = tempfile.NamedTemporaryFile(suffix='.db', delete=False) + tmp.close() + db = Database(tmp.name) + self.addCleanup(lambda: (db._conn.close(), os.remove(tmp.name))) + + h = Fake(db) + h._handle_status() + self.assertEqual(h._json['version'], __version__) + + if __name__ == '__main__': unittest.main()