pygnssutils 1.2.9__tar.gz → 1.3.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pygnssutils-1.2.9/src/pygnssutils.egg-info → pygnssutils-1.3.0}/PKG-INFO +8 -8
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/pyproject.toml +8 -8
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/_version.py +1 -1
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssntripclient.py +5 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssreader.py +9 -8
- {pygnssutils-1.2.9 → pygnssutils-1.3.0/src/pygnssutils.egg-info}/PKG-INFO +8 -8
- pygnssutils-1.3.0/src/pygnssutils.egg-info/requires.txt +10 -0
- pygnssutils-1.2.9/src/pygnssutils.egg-info/requires.txt +0 -10
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/LICENSE +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/README.md +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/setup.cfg +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/__init__.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/exceptions.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/globals.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssntripclient_cli.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssserver.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssserver_cli.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssstreamer.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssstreamer_cli.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/helpers.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_reader.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_bds.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_gal.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_glo.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_gps.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_irn.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_qzs.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_sba.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_cli.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_met.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_nav.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_obs.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_globals.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_helpers.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/socket_server.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/SOURCES.txt +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/dependency_links.txt +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/entry_points.txt +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/top_level.txt +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_cli.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_gnssstreamer.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rawnav.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rinex.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rinex_defs.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rinex_parse.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_socketwrapper.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_sourcetable.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_static.py +0 -0
- {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_stream.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygnssutils
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: GNSS Command Line Utilities
|
|
5
5
|
Author: Steve Smith
|
|
6
6
|
Author-email: semuadmin@semuconsulting.com
|
|
@@ -34,15 +34,15 @@ Requires-Python: >=3.10
|
|
|
34
34
|
Description-Content-Type: text/markdown
|
|
35
35
|
License-File: LICENSE
|
|
36
36
|
Requires-Dist: certifi>=2026.0.0
|
|
37
|
-
Requires-Dist: pynmeagps>=1.1.
|
|
38
|
-
Requires-Dist: pyqgc>=1.0.
|
|
39
|
-
Requires-Dist: pyrtcm>=1.2.
|
|
40
|
-
Requires-Dist: pysbf2>=1.0.
|
|
37
|
+
Requires-Dist: pynmeagps>=1.1.8
|
|
38
|
+
Requires-Dist: pyqgc>=1.0.1
|
|
39
|
+
Requires-Dist: pyrtcm>=1.2.1
|
|
40
|
+
Requires-Dist: pysbf2>=1.0.7
|
|
41
41
|
Requires-Dist: pyserial>=3.5
|
|
42
|
-
Requires-Dist: pyspartn>=1.0
|
|
43
|
-
Requires-Dist: pyubx2>=1.3.
|
|
42
|
+
Requires-Dist: pyspartn>=1.1.0
|
|
43
|
+
Requires-Dist: pyubx2>=1.3.9
|
|
44
44
|
Requires-Dist: pyubxutils>=1.0.6
|
|
45
|
-
Requires-Dist: pyunigps>=1.0.
|
|
45
|
+
Requires-Dist: pyunigps>=1.0.1
|
|
46
46
|
Dynamic: license-file
|
|
47
47
|
|
|
48
48
|
pygnssutils
|
|
@@ -39,15 +39,15 @@ classifiers = [
|
|
|
39
39
|
|
|
40
40
|
dependencies = [
|
|
41
41
|
"certifi>=2026.0.0",
|
|
42
|
-
"pynmeagps>=1.1.
|
|
43
|
-
"pyqgc>=1.0.
|
|
44
|
-
"pyrtcm>=1.2.
|
|
45
|
-
"pysbf2>=1.0.
|
|
42
|
+
"pynmeagps>=1.1.8",
|
|
43
|
+
"pyqgc>=1.0.1",
|
|
44
|
+
"pyrtcm>=1.2.1",
|
|
45
|
+
"pysbf2>=1.0.7",
|
|
46
46
|
"pyserial>=3.5",
|
|
47
|
-
"pyspartn>=1.0
|
|
48
|
-
"pyubx2>=1.3.
|
|
47
|
+
"pyspartn>=1.1.0",
|
|
48
|
+
"pyubx2>=1.3.9",
|
|
49
49
|
"pyubxutils>=1.0.6",
|
|
50
|
-
"pyunigps>=1.0.
|
|
50
|
+
"pyunigps>=1.0.1",
|
|
51
51
|
]
|
|
52
52
|
|
|
53
53
|
[project.scripts]
|
|
@@ -66,7 +66,7 @@ changelog = "https://github.com/semuconsulting/pygnssutils/blob/master/RELEASE_N
|
|
|
66
66
|
build = [
|
|
67
67
|
"build",
|
|
68
68
|
"packaging>=24.2",
|
|
69
|
-
"pip",
|
|
69
|
+
"pip>=25.1",
|
|
70
70
|
"setuptools>=75.0.0",
|
|
71
71
|
"twine>=6.1.0",
|
|
72
72
|
"wheel",
|
|
@@ -700,14 +700,19 @@ class GNSSNTRIPClient:
|
|
|
700
700
|
:param Any | NoneType parsed: parsed message
|
|
701
701
|
"""
|
|
702
702
|
|
|
703
|
+
if hasattr(parsed, "identity"):
|
|
704
|
+
self.logger.debug(f"Message received: {type(parsed)} {parsed.identity}")
|
|
705
|
+
|
|
703
706
|
if output is not None:
|
|
704
707
|
# serialize sourcetable if outputting to stream
|
|
705
708
|
if isinstance(raw, list) and not isinstance(output, Queue):
|
|
706
709
|
raw = self._serialize_sourcetable(raw)
|
|
707
710
|
if isinstance(output, (Serial, BufferedWriter)) and raw is not None:
|
|
708
711
|
output.write(raw)
|
|
712
|
+
output.flush()
|
|
709
713
|
elif isinstance(output, TextIOWrapper) and parsed is not None:
|
|
710
714
|
output.write(str(parsed))
|
|
715
|
+
output.flush()
|
|
711
716
|
elif isinstance(output, Queue) and raw is not None:
|
|
712
717
|
output.put(raw if self.__app == CLIAPP else (raw, parsed))
|
|
713
718
|
elif isinstance(output, socket) and raw is not None:
|
|
@@ -287,22 +287,22 @@ class GNSSReader:
|
|
|
287
287
|
|
|
288
288
|
return self
|
|
289
289
|
|
|
290
|
-
def __next__(self) -> tuple[bytes
|
|
290
|
+
def __next__(self) -> tuple[bytes, Any]:
|
|
291
291
|
"""
|
|
292
292
|
Return next item in iteration.
|
|
293
293
|
|
|
294
294
|
:return: tuple of (raw_data as bytes, parsed_data as UBXMessage)
|
|
295
|
-
:rtype: tuple[bytes
|
|
295
|
+
:rtype: tuple[bytes, Any]
|
|
296
296
|
:raises: StopIteration
|
|
297
297
|
|
|
298
298
|
"""
|
|
299
299
|
|
|
300
300
|
raw_data, parsed_data = self.read()
|
|
301
|
-
if raw_data
|
|
301
|
+
if raw_data == b"" and parsed_data is None:
|
|
302
302
|
raise StopIteration
|
|
303
303
|
return raw_data, parsed_data
|
|
304
304
|
|
|
305
|
-
def read(self) -> tuple[bytes
|
|
305
|
+
def read(self) -> tuple[bytes, Any]:
|
|
306
306
|
"""
|
|
307
307
|
Read a single NMEA, UBX, SBF, QGC, UNI or RTCM3 message from the stream buffer
|
|
308
308
|
and return both raw and parsed data.
|
|
@@ -312,16 +312,16 @@ class GNSSReader:
|
|
|
312
312
|
|
|
313
313
|
:return: tuple of (raw_data as bytes, parsed_data as NMEAMessage, UBXMessage,
|
|
314
314
|
SBFMessage, QGCMessage, UNIMessage, RTCMMessage or (if `parsing=2`) GNSSMessage)
|
|
315
|
-
:rtype: tuple[bytes
|
|
315
|
+
:rtype: tuple[bytes, Any]
|
|
316
316
|
:raises: Exception (if invalid or unrecognised protocol in data stream)
|
|
317
317
|
"""
|
|
318
318
|
|
|
319
|
-
raw_data =
|
|
319
|
+
raw_data = b""
|
|
320
320
|
parsed_data = None
|
|
321
321
|
while True: # loop until end of valid message or EOF
|
|
322
322
|
try:
|
|
323
323
|
|
|
324
|
-
raw_data =
|
|
324
|
+
# raw_data = b""
|
|
325
325
|
parsed_data = None
|
|
326
326
|
byte1 = self._read_bytes(1) # read the first byte
|
|
327
327
|
# if not UBX, SBF, QGC, UNI, NMEA or RTCM3, discard and continue
|
|
@@ -382,10 +382,11 @@ class GNSSReader:
|
|
|
382
382
|
if self._protfilter & RTCM3_PROTOCOL:
|
|
383
383
|
break
|
|
384
384
|
continue
|
|
385
|
+
raw_data = bytehdr
|
|
385
386
|
raise GNSSStreamError(f"Unknown protocol header {escapeall(bytehdr)}.")
|
|
386
387
|
|
|
387
388
|
except EOFError:
|
|
388
|
-
return (
|
|
389
|
+
return (b"", None)
|
|
389
390
|
except (
|
|
390
391
|
UBXMessageError,
|
|
391
392
|
UBXTypeError,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygnssutils
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.3.0
|
|
4
4
|
Summary: GNSS Command Line Utilities
|
|
5
5
|
Author: Steve Smith
|
|
6
6
|
Author-email: semuadmin@semuconsulting.com
|
|
@@ -34,15 +34,15 @@ Requires-Python: >=3.10
|
|
|
34
34
|
Description-Content-Type: text/markdown
|
|
35
35
|
License-File: LICENSE
|
|
36
36
|
Requires-Dist: certifi>=2026.0.0
|
|
37
|
-
Requires-Dist: pynmeagps>=1.1.
|
|
38
|
-
Requires-Dist: pyqgc>=1.0.
|
|
39
|
-
Requires-Dist: pyrtcm>=1.2.
|
|
40
|
-
Requires-Dist: pysbf2>=1.0.
|
|
37
|
+
Requires-Dist: pynmeagps>=1.1.8
|
|
38
|
+
Requires-Dist: pyqgc>=1.0.1
|
|
39
|
+
Requires-Dist: pyrtcm>=1.2.1
|
|
40
|
+
Requires-Dist: pysbf2>=1.0.7
|
|
41
41
|
Requires-Dist: pyserial>=3.5
|
|
42
|
-
Requires-Dist: pyspartn>=1.0
|
|
43
|
-
Requires-Dist: pyubx2>=1.3.
|
|
42
|
+
Requires-Dist: pyspartn>=1.1.0
|
|
43
|
+
Requires-Dist: pyubx2>=1.3.9
|
|
44
44
|
Requires-Dist: pyubxutils>=1.0.6
|
|
45
|
-
Requires-Dist: pyunigps>=1.0.
|
|
45
|
+
Requires-Dist: pyunigps>=1.0.1
|
|
46
46
|
Dynamic: license-file
|
|
47
47
|
|
|
48
48
|
pygnssutils
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|