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.
Files changed (51) hide show
  1. {pygnssutils-1.2.9/src/pygnssutils.egg-info → pygnssutils-1.3.0}/PKG-INFO +8 -8
  2. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/pyproject.toml +8 -8
  3. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/_version.py +1 -1
  4. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssntripclient.py +5 -0
  5. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssreader.py +9 -8
  6. {pygnssutils-1.2.9 → pygnssutils-1.3.0/src/pygnssutils.egg-info}/PKG-INFO +8 -8
  7. pygnssutils-1.3.0/src/pygnssutils.egg-info/requires.txt +10 -0
  8. pygnssutils-1.2.9/src/pygnssutils.egg-info/requires.txt +0 -10
  9. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/LICENSE +0 -0
  10. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/README.md +0 -0
  11. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/setup.cfg +0 -0
  12. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/__init__.py +0 -0
  13. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/exceptions.py +0 -0
  14. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/globals.py +0 -0
  15. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssntripclient_cli.py +0 -0
  16. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssserver.py +0 -0
  17. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssserver_cli.py +0 -0
  18. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssstreamer.py +0 -0
  19. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/gnssstreamer_cli.py +0 -0
  20. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/helpers.py +0 -0
  21. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav.py +0 -0
  22. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_reader.py +0 -0
  23. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_bds.py +0 -0
  24. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_gal.py +0 -0
  25. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_glo.py +0 -0
  26. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_gps.py +0 -0
  27. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_irn.py +0 -0
  28. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_qzs.py +0 -0
  29. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rawnav_subframes_sba.py +0 -0
  30. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv.py +0 -0
  31. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_cli.py +0 -0
  32. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_met.py +0 -0
  33. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_nav.py +0 -0
  34. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_conv_obs.py +0 -0
  35. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_globals.py +0 -0
  36. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/rinex_helpers.py +0 -0
  37. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils/socket_server.py +0 -0
  38. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/SOURCES.txt +0 -0
  39. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/dependency_links.txt +0 -0
  40. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/entry_points.txt +0 -0
  41. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/src/pygnssutils.egg-info/top_level.txt +0 -0
  42. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_cli.py +0 -0
  43. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_gnssstreamer.py +0 -0
  44. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rawnav.py +0 -0
  45. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rinex.py +0 -0
  46. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rinex_defs.py +0 -0
  47. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_rinex_parse.py +0 -0
  48. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_socketwrapper.py +0 -0
  49. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_sourcetable.py +0 -0
  50. {pygnssutils-1.2.9 → pygnssutils-1.3.0}/tests/test_static.py +0 -0
  51. {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.2.9
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.7
38
- Requires-Dist: pyqgc>=1.0.0
39
- Requires-Dist: pyrtcm>=1.2.0
40
- Requires-Dist: pysbf2>=1.0.4
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.8
43
- Requires-Dist: pyubx2>=1.3.7
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.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.7",
43
- "pyqgc>=1.0.0",
44
- "pyrtcm>=1.2.0",
45
- "pysbf2>=1.0.4",
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.8",
48
- "pyubx2>=1.3.7",
47
+ "pyspartn>=1.1.0",
48
+ "pyubx2>=1.3.9",
49
49
  "pyubxutils>=1.0.6",
50
- "pyunigps>=1.0.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",
@@ -8,4 +8,4 @@ Created on 2 Oct 2020
8
8
  :license: BSD 3-Clause
9
9
  """
10
10
 
11
- __version__ = "1.2.9"
11
+ __version__ = "1.3.0"
@@ -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 | NoneType, Any]:
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 | NoneType, Any]
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 is None and parsed_data is None:
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 | NoneType, Any]:
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 | NoneType, Any]
315
+ :rtype: tuple[bytes, Any]
316
316
  :raises: Exception (if invalid or unrecognised protocol in data stream)
317
317
  """
318
318
 
319
- raw_data = None
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 = None
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 (None, None)
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.2.9
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.7
38
- Requires-Dist: pyqgc>=1.0.0
39
- Requires-Dist: pyrtcm>=1.2.0
40
- Requires-Dist: pysbf2>=1.0.4
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.8
43
- Requires-Dist: pyubx2>=1.3.7
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.0
45
+ Requires-Dist: pyunigps>=1.0.1
46
46
  Dynamic: license-file
47
47
 
48
48
  pygnssutils
@@ -0,0 +1,10 @@
1
+ certifi>=2026.0.0
2
+ pynmeagps>=1.1.8
3
+ pyqgc>=1.0.1
4
+ pyrtcm>=1.2.1
5
+ pysbf2>=1.0.7
6
+ pyserial>=3.5
7
+ pyspartn>=1.1.0
8
+ pyubx2>=1.3.9
9
+ pyubxutils>=1.0.6
10
+ pyunigps>=1.0.1
@@ -1,10 +0,0 @@
1
- certifi>=2026.0.0
2
- pynmeagps>=1.1.7
3
- pyqgc>=1.0.0
4
- pyrtcm>=1.2.0
5
- pysbf2>=1.0.4
6
- pyserial>=3.5
7
- pyspartn>=1.0.8
8
- pyubx2>=1.3.7
9
- pyubxutils>=1.0.6
10
- pyunigps>=1.0.0
File without changes
File without changes
File without changes