space-packet-parser 6.1.2__tar.gz → 6.2.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 (112) hide show
  1. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/.gitignore +7 -2
  2. space_packet_parser-6.2.0/CHANGELOG.md +391 -0
  3. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/CITATION.cff +1 -4
  4. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/PKG-INFO +4 -4
  5. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/README.md +1 -1
  6. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/browser-parsing.html +1 -1
  7. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/pyodide_parse_packets.js +6 -6
  8. space_packet_parser-6.2.0/docs/source/benchmarking.md +256 -0
  9. space_packet_parser-6.2.0/docs/source/browser_demo.md +15 -0
  10. space_packet_parser-6.2.0/docs/source/changelog.md +3 -0
  11. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/conf.py +2 -1
  12. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/developers.md +20 -29
  13. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/examples.md +7 -2
  14. space_packet_parser-6.2.0/docs/source/getting_started.md +203 -0
  15. space_packet_parser-6.2.0/docs/source/index.md +18 -0
  16. space_packet_parser-6.2.0/docs/source/user_guide/error_handling.md +92 -0
  17. space_packet_parser-6.2.0/docs/source/user_guide/generators.md +95 -0
  18. space_packet_parser-6.2.0/docs/source/user_guide/index.md +34 -0
  19. space_packet_parser-6.2.0/docs/source/user_guide/packets_and_parameters.md +190 -0
  20. space_packet_parser-6.2.0/docs/source/user_guide/performance.md +64 -0
  21. space_packet_parser-6.2.0/docs/source/user_guide/sockets.md +17 -0
  22. space_packet_parser-6.2.0/docs/source/user_guide/variable_length_fields.md +112 -0
  23. space_packet_parser-6.2.0/docs/source/user_guide/xarray.md +54 -0
  24. space_packet_parser-6.2.0/docs/source/user_guide/xtce_validation.md +112 -0
  25. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/pyproject.toml +5 -3
  26. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/__init__.py +2 -1
  27. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/cli.py +32 -1
  28. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/utils.py +9 -9
  29. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/definitions.py +15 -9
  30. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/encodings.py +8 -8
  31. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/parameter_types.py +49 -37
  32. space_packet_parser-6.2.0/space_packet_parser/xtce/schemas/README.md +19 -0
  33. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/validation.py +378 -62
  34. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/conftest.py +38 -0
  35. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_cli.py +2 -1
  36. space_packet_parser-6.2.0/tests/test_data/SpaceSystem.xsd +5918 -0
  37. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_parameter_types.py +139 -0
  38. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_validation.py +80 -36
  39. space_packet_parser-6.2.0/tests/unit/test_xtce/test_validation_security.py +257 -0
  40. space_packet_parser-6.1.2/docs/source/benchmarking.md +0 -121
  41. space_packet_parser-6.1.2/docs/source/browser-demo.rst +0 -5
  42. space_packet_parser-6.1.2/docs/source/changelog.md +0 -199
  43. space_packet_parser-6.1.2/docs/source/contents.rst +0 -11
  44. space_packet_parser-6.1.2/docs/source/index.rst +0 -7
  45. space_packet_parser-6.1.2/docs/source/users.md +0 -665
  46. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/LICENSE.txt +0 -0
  47. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/Makefile +0 -0
  48. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/logo-no-background.png +0 -0
  49. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/csv_to_xtce_conversion.py +0 -0
  50. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/packet_filtering.py +0 -0
  51. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/parsing_and_plotting_idex_waveforms_from_socket.py +0 -0
  52. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/parsing_to_xarray_dataset.py +0 -0
  53. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/common.py +0 -0
  54. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/definitions.py +0 -0
  55. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/exceptions.py +0 -0
  56. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/__init__.py +0 -0
  57. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/ccsds.py +0 -0
  58. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/fixed_length.py +0 -0
  59. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/udp.py +0 -0
  60. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/packets.py +0 -0
  61. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xarr.py +0 -0
  62. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/__init__.py +0 -0
  63. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/calibrators.py +0 -0
  64. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/comparisons.py +0 -0
  65. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/containers.py +0 -0
  66. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/parameters.py +0 -0
  67. {space_packet_parser-6.1.2/tests/test_data → space_packet_parser-6.2.0/space_packet_parser/xtce/schemas}/SpaceSystem.xsd +0 -0
  68. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/__init__.py +0 -0
  69. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/__init__.py +0 -0
  70. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/test_fast_benchmarks.py +0 -0
  71. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/test_slow_benchmarks.py +0 -0
  72. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/test_xtce_parsing_benchmarks.py +0 -0
  73. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/__init__.py +0 -0
  74. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_bufferedreader_parsing.py +0 -0
  75. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_socket_parsing.py +0 -0
  76. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xarr.py +0 -0
  77. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/__init__.py +0 -0
  78. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_ctim_parsing.py +0 -0
  79. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_inheritance_restrictions.py +0 -0
  80. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_jpss_parsing.py +0 -0
  81. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_suda_parsing.py +0 -0
  82. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/ctim/ccsds_2021_155_14_39_51 +0 -0
  83. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/ctim/ctim_xtce_v1.xml +0 -0
  84. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/idex/idex_combined_science_definition.xml +0 -0
  85. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/idex/sciData_2023_052_14_45_05 +0 -0
  86. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/jpss/J01_G011_LZ_2021-04-09T00-00-00Z_V01.DAT1 +0 -0
  87. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/jpss/ccsdspy_jpss1_geolocation.csv +0 -0
  88. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/jpss/contrived_inheritance_structure.xml +0 -0
  89. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/jpss/jpss1_geolocation_xtce_v1.xml +0 -0
  90. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/suda/sciData_2022_130_17_41_53.spl +0 -0
  91. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/suda/suda_combined_science_definition.xml +0 -0
  92. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce.xml +0 -0
  93. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce_4byte.xml +0 -0
  94. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce_default_namespace.xml +0 -0
  95. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce_no_namespace.xml +0 -0
  96. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/udp_packet.xml +0 -0
  97. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/__init__.py +0 -0
  98. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_common.py +0 -0
  99. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/__init__.py +0 -0
  100. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_ccsds.py +0 -0
  101. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_fixed_length.py +0 -0
  102. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_udp.py +0 -0
  103. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_utils.py +0 -0
  104. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_space_packet_parser.py +0 -0
  105. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xarr.py +0 -0
  106. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/__init__.py +0 -0
  107. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_calibrators.py +0 -0
  108. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_comparisons.py +0 -0
  109. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_containers.py +0 -0
  110. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_definitions.py +0 -0
  111. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_encodings.py +0 -0
  112. {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_parameters.py +0 -0
@@ -15,7 +15,6 @@
15
15
  coverage_report
16
16
  coverage.xml
17
17
  corbertura_report.xml
18
- tests/test_data/hidden
19
18
  */.benchmarks
20
19
 
21
20
  # Local Installation Artifacts #
@@ -75,4 +74,10 @@ venv
75
74
  ##################
76
75
  .python-version
77
76
  pytest.ini
78
- .claude
77
+ .claude/settings.local.json
78
+ .claude/CLAUDE.local.json
79
+ .mcp.json
80
+
81
+ # Hidden Content #
82
+ ##################
83
+ **/_hidden
@@ -0,0 +1,391 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [6.2.0] - 2026-09-13
11
+
12
+ ### Security
13
+
14
+ - Fix a local file read vulnerability (CWE-73) and a Server-Side Request Forgery vulnerability
15
+ (CWE-918) in `validate_xtce`. A document-supplied `xsi:schemaLocation` is now treated as
16
+ untrusted: absolute and relative local filesystem paths are rejected (use `local_xsd` for a
17
+ local schema), and schema URLs are fetched only over `https` from an allowlisted host (default
18
+ `www.omg.org`), with requests to internal/link-local addresses (e.g. `169.254.169.254`,
19
+ `127.0.0.1`) always blocked. Downloaded content is size-capped and is written to the cache only
20
+ after it validates as an XSD, so a non-schema response can no longer be persisted to disk.
21
+ [#266](https://github.com/lasp/space_packet_parser/issues/266)
22
+
23
+ ### Added
24
+
25
+ - Bundle the standard OMG XTCE 1.2 schema with the package so documents referencing it validate
26
+ offline with no network request.
27
+ - Add `allowed_schema_hosts`, `allow_insecure_http`, and `allow_schema_download` options to
28
+ `validate_xtce` (and the corresponding `--allowed-schema-host`, `--allow-insecure-http`, and
29
+ `--no-schema-download` flags to `spp validate`). The allowlist may also be set via the
30
+ `SPP_ALLOWED_SCHEMA_HOSTS` environment variable, and insecure http via `SPP_ALLOW_INSECURE_HTTP`.
31
+ The default allowlist is exported as `DEFAULT_ALLOWED_SCHEMA_HOSTS`.
32
+ - Support multiple `<xtce:Unit>` elements within an `<xtce:UnitSet>`, so parameter types can declare
33
+ compound units. Applies to every parameter type, both when reading an XTCE document and when
34
+ serializing one back out.
35
+ [#47](https://github.com/lasp/space_packet_parser/issues/47)
36
+
37
+ ### Changed
38
+
39
+ - Reorganize the user documentation. The single `users.md` page is split into a `Getting Started`
40
+ page (installation, the parsing workflow, and a self-contained runnable quickstart) and a
41
+ `User Guide` section with one page per topic: packet bytes generators, packet and parameter
42
+ objects, xarray datasets, variable length fields, XTCE validation, error handling and
43
+ troubleshooting, socket parsing, and performance tuning. The Sphinx toctree is now defined in
44
+ MyST Markdown rather than reStructuredText, and pages cross-link to one another.
45
+ [#192](https://github.com/lasp/space_packet_parser/issues/192)
46
+ - Refresh the benchmarking documentation against the current benchmark suite. All nine benchmarks
47
+ are now covered, including complex (IDEX) packet parsing and XTCE definition load times, which
48
+ were previously unreported. Removes a progress-printing comparison that was not reproducible from
49
+ the committed test suite, and fixes a GitHub-style `[!NOTE]` callout that rendered as literal text
50
+ in the built documentation. Documents packet filtering on muxed streams as a performance lever,
51
+ and corrects the explanation of what drives parsing cost: dynamic evaluation work, not packet
52
+ size or definition-wide parameter count.
53
+ - Widen the `unit` attribute of parameter types from `str | None` to `str | tuple[str, ...] | None`.
54
+ An `<xtce:UnitSet>` containing more than one `<xtce:Unit>` previously emitted a warning and joined
55
+ the units into a single space-separated string; it now yields a tuple of the individual unit
56
+ strings. Definitions declaring a single unit are unaffected.
57
+ [#47](https://github.com/lasp/space_packet_parser/issues/47)
58
+
59
+ ### Fixed
60
+
61
+ - Correct the documented meaning of `root_container_name` on `parse_bytes`, `parse_packet`, and
62
+ `parse_ccsds_packet`. All three stated that a specified root container "must begin with the
63
+ definition of a CCSDS header in order to parse correctly", which is not true — any container in
64
+ the definition may be used as the root, and XTCE has no notion of the CCSDS standard (as the
65
+ deprecated methods' own warnings point out). `"CCSDSPacket"` is the default container name, not a
66
+ structural requirement.
67
+ - Remove the duplicated table of contents from the User Guide landing page, and describe the packet
68
+ filtering example on the Examples page alongside the others.
69
+ - Fix the navigation sidebar on the in-browser demo page. The demo's standalone HTML document was
70
+ spliced into the middle of the documentation page, so its Materialize stylesheet applied to the
71
+ whole page: `nav { height: 56px; width: 100%; background-color: #ee6e73; position: fixed }` and
72
+ `nav ul li { float: left }` collapsed the theme's `<nav class="wy-nav-side">` sidebar, and the
73
+ demo's `body { display: flex; max-width: 900px }` rule constrained the page layout. The demo is
74
+ now embedded in an iframe, which isolates its styles while leaving the demo itself unchanged.
75
+ - Correct several longstanding inaccuracies in the user documentation, surfaced while
76
+ reorganizing it. The Getting Started workflow now imports `space_packet_parser` and opens the
77
+ packet file in binary mode (`ccsds_generator` takes a file-like object, not a path, and raised
78
+ `OSError` as previously written); `udp_generator` is imported from `space_packet_parser.generators`
79
+ rather than the package root, which does not export it; the removed
80
+ `yield_unrecognized_packet_errors` option is no longer referenced; the socket page no longer
81
+ claims `ccsds_generator` yields parsed packets rather than `CCSDSPacketBytes`; `BoolParameter` is
82
+ documented as subclassing `int` rather than `bool` (Python forbids subclassing `bool`, so
83
+ `isinstance(param, bool)` is `False`); and the `validate_xtce` examples pass
84
+ `raise_on_error=False`, without which the documented `result.errors` inspection was unreachable.
85
+ - Fix `CLAUDE_CONFIG_DIR` and persist the IPv6 localhost workaround for MCP OAuth in the
86
+ devcontainer configuration.
87
+ - `validate_xtce(local_xsd=...)` and `spp validate --local-xsd` again accept absolute paths from
88
+ any working directory (a regression that silently rewrote them to a bare filename in the current
89
+ directory). Schema-fetch failures are now reported with accurate error codes
90
+ (`DISALLOWED_SCHEMA_LOCATION` rather than a misleading `MISSING_SCHEMA_LOCATION`).
91
+
92
+ ## [6.1.2] - 2026-04-02
93
+
94
+ ### Fixed
95
+
96
+ - Prevent BinaryParameter truncation in `create_dataset`. [#246](https://github.com/lasp/space_packet_parser/issues/246)
97
+
98
+ ## [6.1.1] - 2026-03-31
99
+
100
+ ### Fixed
101
+
102
+ - Support lxml 5.2.1. [#236](https://github.com/lasp/space_packet_parser/issues/236)
103
+
104
+ ## [6.1.0] - 2026-01-21
105
+
106
+ ### Added
107
+
108
+ - Add support for filtering packets in `create_dataset`
109
+ - Add warnings if there are leftover bytes from a CCSDS generator
110
+
111
+ ### Changed
112
+
113
+ - Migrated from Poetry to uv/hatchling for Python project management
114
+ - Add support for Python 3.14
115
+
116
+ ### Fixed
117
+
118
+ - Handle optional secondary headers with CCSDS continuation packets
119
+
120
+ ## [6.0.1] - 2025-11-06
121
+
122
+ ### Fixed
123
+
124
+ - Incorrect bitshift logic for ccsds generator packet length creation
125
+ in very specific circumstances (only if large data on power of 2 boundary)
126
+
127
+ ## [6.0.0] - 2025-09-04
128
+
129
+ ### Added
130
+
131
+ - Add validation support for XTCE documents.
132
+ - Add support for creating a packet definition from Python objects and serializing it as XML.
133
+ - Add support for string and float encoded enumerated lookup parameters.
134
+ - Add properties to extract the CCSDS Header items from the `CCSDSPacketBytes` object directly.
135
+ e.g. `CCSDSPacketBytes.apid`
136
+ - Add a `create_ccsds_packet` function that can create a CCSDS Packet
137
+ with the given header items and data. This is useful for creating
138
+ mock packets in testing and experimentation for creating debugging
139
+ streams as needed.
140
+ - Add a `ccsds_generator()` function that iterates through raw
141
+ bytes and yields individual CCSDS packets.
142
+ - Add continuation packet support to the ccsds packet generation.
143
+ This adds logic to concatenate packet data fields together across successive
144
+ packets (if there was too much data to fit in a single CCSDS packet or it
145
+ was logically better to split by other teams).
146
+ - Add warnings if packets are out of sequence within a given apid.
147
+ - Add ability to remove secondary header bytes from subsequent packets.
148
+ `ccsds_generator(data, combine_segmented_packets=True, secondary_header_bytes=4)`
149
+ - Add a command line interface (spp) to enable quick and easy access to
150
+ some common tasks and utilities.
151
+ - Add function to directly create an `xarray.DataSet` from a packet file and XTCE definition.
152
+ e.g. `space_packet_parser.xarr.create_dataset([packets1, packets2, ...], definition)`
153
+ - Add benchmark tests and documentation overview of benchmarks.
154
+
155
+ ### Changed
156
+
157
+ - _BREAKING_: `XtcePacketDefinition` no longer accepts a file object as input.
158
+ Use `spp.xtce.definitions.XtcePacketDefinition.from_xtce()` or `spp.load_xtce()` instead.
159
+ - _BREAKING_: Reorganization of the project into different submodules for more explicit handling
160
+ of imports. There is now an `space_packet_parser.xtce` module with xtce representations separated
161
+ into modules underneath that.
162
+ - Improve XML namespace handling when parsing and serializing XTCE.
163
+ - Package for Anaconda distribution via the `lasp` channel
164
+
165
+ ### Removed
166
+
167
+ - _BREAKING_: Removed mid-level abstraction methods `packet_generator()` and `ccsds_packet_generator()`
168
+ from `XtcePacketDefinition`. Use low-level `parse_bytes()` with bytes generators directly, or high-level
169
+ `space_packet_parser.xarr.create_dataset()` for xarray integration.
170
+
171
+ ### Fixed
172
+
173
+ - Fix kbps calculation in packet generator for showing progress.
174
+ - Update list of allowed float encodings to match XTCE spec
175
+
176
+ ## [5.0.1] - 2024-10-08
177
+
178
+ ### Changed
179
+
180
+ - If a packet definition parses too few bits, a UserWarning is now emitted instead of a logger warning.
181
+
182
+ ### Fixed
183
+
184
+ - Allow raw_value representation for enums with falsy raw values. Previously these defaulted to the enum label.
185
+
186
+ ## [5.0.0] - 2024-10-03
187
+
188
+ ### Added
189
+
190
+ - A `RawPacketData` class has been added that is a subclass of bytes. It keeps track of the current
191
+ parsing location and enables reading of bit lengths as integers or raw bytes.
192
+ - Add error reporting for unsupported and invalid parameter types
193
+ - Add support for MIL-1750A floats (32-bit only)
194
+
195
+ ### Changed
196
+
197
+ - _BREAKING_: Main API changed. No need to create separate definition and parser objects any more. Create only a
198
+ definition from your XTCE document and instead of `my_parser.generator`, use `my_packet_definition.packet_generator`.
199
+ - _BREAKING_: Separated out logical pieces into separate modules rather than everything
200
+ living within the xtcedef module. This means user imports may be different now.
201
+ - _BREAKING_: Replace `bitstring` objects with native Python bytes objects
202
+ - Much faster parsing speed
203
+ - Users that are passing `bitstring.ConstBitStream` objects to `generator` will need to pass a
204
+ binary filelike object instead
205
+ - _BREAKING_: The `ParsedDataItem` class has been removed and the derived values are being returned now.
206
+ The `raw_value` is stored as an attribute on the returned object. The other items can be accessed
207
+ through the packet definition object `my_packet_definition.named_parameters["my_item"].short_description`
208
+ - _BREAKING_: The return type of BinaryDataEncoding is now the raw bytes.
209
+ To get the previous behavior you can convert the data to an integer and then format it as a binary string.
210
+ `f"{int.from_bytes(data, byteorder='big'):0{len(data)*8}b}"`
211
+ - _BREAKING_: Changed `packet_generator` kwarg `skip_header_bits` to `skip_header_bytes`.
212
+ - The `CCSDSPacket` class is now a dictionary subclass, enabling direct lookup of items from the Packet itself.
213
+
214
+ ### Removed
215
+
216
+ - _BREAKING_: Removed CSV-based packet definition support. We may indirectly support this in the future via
217
+ a utility for converting CSV definitions to XTCE.
218
+ - _BREAKING_: Remove dependency on the `bitstring` library
219
+ - _BREAKING_: Removed `word_size` kwarg from packet generator method.
220
+ We expect all binary data to be integer number of bytes.
221
+
222
+ ### Fixed
223
+
224
+ - Fixed incorrect parsing of StringDataEncoding elements. Raw string values are now returned as byte buffers.
225
+ Derived string values contain python string objects.
226
+ - Fix EnumeratedParameterType to handle duplicate labels
227
+
228
+ ## [4.2.0] - 2024-03-05
229
+
230
+ ### Added
231
+
232
+ - Parse short and long descriptions of parameters
233
+ - Include parameter short description and long description in ParsedDataItems
234
+ - Add support for AbsoluteTimeParameterType and RelativeTimeParameterType
235
+ - Add support for BooleanParameterType
236
+ - Support BooleanExpression in a ContextCalibrator
237
+
238
+ ### Changed
239
+
240
+ - Implement equality checking for SequenceContainer objects and Parameter objects
241
+ - Drop support for bitstring <4.0.1
242
+ - Default read size is changed to a full file read on file-like objects
243
+ - Improve error handling for invalid/unsupported parameter types
244
+
245
+ ## [4.1.1] - 2024-04-01
246
+
247
+ ### Changed
248
+
249
+ - Allow Python 3.12
250
+
251
+ ## [4.1.0] - 2023-08-31
252
+
253
+ ### Added
254
+
255
+ - Add informative error if user tries to parse a TextIO object
256
+ - Add documentation of some common issues and add changelog to documentation
257
+
258
+ ### Fixed
259
+
260
+ - Bugfix in fill_buffer to allow compatibility with Bitstring 4.1.1
261
+
262
+ ## [4.0.2] - 2023-03-14
263
+
264
+ ### Changed
265
+
266
+ - Documentation updates for Read The Docs
267
+
268
+ ## [4.0.1] - 2023-03-10
269
+
270
+ ### Added
271
+
272
+ - Add examples directory to help users
273
+ - Add CITATION.cff
274
+ - Add CODE_OF_CONDUCT.md
275
+
276
+ ### Changed
277
+
278
+ - Modify API for `PacketParser.generator` to accept a ConstBitStream or a BufferedReader or a socket
279
+ - This will allow us to keep memory overhead of reading a binary stream to almost zero
280
+
281
+ ---
282
+
283
+ ## Historical Changes (`lasp_packets`)
284
+
285
+ Changes documented in v3.0 and earlier correspond to development efforts undertaken before this library was
286
+ moved to GitHub (it was previously known as `lasp_packets`).
287
+ None of the git history is available for these versions as the git history was truncated
288
+ in preparation for the move to GitHub to prevent accidental release of non-public example data which may be
289
+ (but probably isn't) present in historical commits.
290
+
291
+ ## [3.0] - Unknown
292
+
293
+ ### Added
294
+
295
+ - Add a discussion of optimization to the documentation
296
+ - Add support for Python 3.10 and 3.11
297
+ - Add Parser.generator kwargs to aid in debugging
298
+ - Add kwarg to only parse CCSDS headers and skip the user data
299
+ - Add optional progress bar that prints to stdout when parsing a packets file.
300
+
301
+ ### Changed
302
+
303
+ - Change license to BSD3 and CU copyright
304
+ - Redesign the way the parser interprets the SequenceContainer inheritance structure
305
+ - This allows polymorphic packet structures based on flags in telemetry
306
+ - Previous functionality is preserved
307
+ - csvdef module still uses the legacy flattened_containers representation
308
+
309
+ ### Removed
310
+
311
+ - Remove support for Python 3.6
312
+
313
+ ## [2.1] - Unknown
314
+
315
+ ### Changed
316
+
317
+ - Update documentation on release process
318
+
319
+ ## [2.0] - Unknown
320
+
321
+ ### Added
322
+
323
+ - Add link in readme to v1.2 Aug 2021 of XTCE spec
324
+ - Add support for `< xtce:DiscreteLookupList >`
325
+ - Add support for `< xtce:Condition >`
326
+ - Add support for `< xtce:BooleanExpression >`
327
+ - Add option to skip an additional header on each packet
328
+ - Add word size as an optional parameter to the parser
329
+ - Add an optional header name remapping parameter to the parser
330
+ - Add support for BooleanExpression in a RestrictionCriteria element
331
+
332
+ ### Changed
333
+
334
+ - Push the evaluation logic for ParameterTypes down to DataEncodings
335
+ - Modify RestrictionCriteria parser to evaluate MatchCriteria elements
336
+
337
+ ## [1.3] - Unknown
338
+
339
+ ### Changed
340
+
341
+ - Expand version compatibility for python >=3.6, <4
342
+
343
+ ## [1.2] - Unknown
344
+
345
+ ### Added
346
+
347
+ - Add support for instantiating definitions with pathlib.Path objects.
348
+
349
+ ### Changed
350
+
351
+ - Remove unnecessary warning about float data types being IEEE formatted.
352
+ - Switch package manager to Poetry.
353
+
354
+ ## [1.1.0] - Unknown
355
+
356
+ ### Added
357
+
358
+ - Add support for CSV-based packet definitions (contribution by Michael Chambliss).
359
+
360
+ ## [1.0] - Unknown
361
+
362
+ ### Added
363
+
364
+ - Add support for all parameter types.
365
+ - Add support for all data encodings.
366
+ - Add support for calibrators and contextual calibrators.
367
+ - Add support for variable length strings given by termination characters or preceding length fields.
368
+ - Add support for variable length binary data fields in utf-8, utf-16-le, and utf-16-be.
369
+ - Add build and release documentation to readme.
370
+
371
+ [unreleased]: https://github.com/lasp/space_packet_parser/compare/6.2.0...HEAD
372
+ [6.2.0]: https://github.com/lasp/space_packet_parser/compare/6.1.2...6.2.0
373
+ [6.1.2]: https://github.com/lasp/space_packet_parser/compare/6.1.1...6.1.2
374
+ [6.1.1]: https://github.com/lasp/space_packet_parser/compare/6.1.0...6.1.1
375
+ [6.1.0]: https://github.com/lasp/space_packet_parser/compare/6.0.1...6.1.0
376
+ [6.0.1]: https://github.com/lasp/space_packet_parser/compare/6.0.0...6.0.1
377
+ [6.0.0]: https://github.com/lasp/space_packet_parser/compare/5.0.1...6.0.0
378
+ [5.0.1]: https://github.com/lasp/space_packet_parser/compare/5.0.0...5.0.1
379
+ [5.0.0]: https://github.com/lasp/space_packet_parser/compare/4.2.0...5.0.0
380
+ [4.2.0]: https://github.com/lasp/space_packet_parser/compare/4.1.1...4.2.0
381
+ [4.1.1]: https://github.com/lasp/space_packet_parser/compare/4.1.0...4.1.1
382
+ [4.1.0]: https://github.com/lasp/space_packet_parser/compare/4.0.2...4.1.0
383
+ [4.0.2]: https://github.com/lasp/space_packet_parser/compare/4.0.1...4.0.2
384
+ [4.0.1]: https://github.com/lasp/space_packet_parser/compare/3.0...4.0.1
385
+ [3.0]: https://github.com/lasp/space_packet_parser/compare/2.1...3.0
386
+ [2.1]: https://github.com/lasp/space_packet_parser/compare/2.0...2.1
387
+ [2.0]: https://github.com/lasp/space_packet_parser/compare/1.3...2.0
388
+ [1.3]: https://github.com/lasp/space_packet_parser/compare/1.2...1.3
389
+ [1.2]: https://github.com/lasp/space_packet_parser/compare/1.1.0...1.2
390
+ [1.1.0]: https://github.com/lasp/space_packet_parser/compare/1.0...1.1.0
391
+ [1.0]: https://github.com/lasp/space_packet_parser/releases/tag/1.0
@@ -1,7 +1,7 @@
1
1
  cff-version: 1.2.0
2
2
  title: 'space_packet_parser'
3
3
  type: software
4
- version: '6.1.2'
4
+ version: '6.2.0'
5
5
  description: A CCSDS telemetry packet decoding library based on the XTCE packet format description standard.
6
6
  license: BSD-3-Clause
7
7
  abstract: The Space Packet Parser Python library is a generalized, configurable packet decoding library for CCSDS telemetry
@@ -29,8 +29,5 @@ maintainers:
29
29
  - email: gavin.medley@lasp.colorado.edu
30
30
  name: Gavin Medley
31
31
  orcid: "0000-0002-3520-9715"
32
- - email: greg.lucas@lasp.colorado.edu
33
- name: Greg Lucas
34
- orcid: "0000-0003-1331-1863"
35
32
  repository-code: "https://github.com/lasp/space_packet_parser"
36
33
  url: "https://space-packet-parser.readthedocs.io"
@@ -1,12 +1,12 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: space_packet_parser
3
- Version: 6.1.2
3
+ Version: 6.2.0
4
4
  Summary: A CCSDS telemetry packet decoding library based on the XTCE packet format description standard.
5
5
  Project-URL: repository, https://github.com/lasp/space_packet_parser
6
6
  Project-URL: homepage, https://github.com/lasp/space_packet_parser
7
7
  Project-URL: documentation, https://space-packet-parser.readthedocs.io
8
8
  Author-email: Gavin Medley <gavin.medley@lasp.colorado.edu>, Greg Lucas <greg.lucas@lasp.colorado.edu>, Michael Chambliss <michael.chambliss@lasp.colorado.edu>
9
- Maintainer-email: Gavin Medley <gavin.medley@lasp.colorado.edu>, Greg Lucas <greg.lucas@lasp.colorado.edu>
9
+ Maintainer-email: Gavin Medley <gavin.medley@lasp.colorado.edu>
10
10
  License: BSD-3-Clause
11
11
  License-File: LICENSE.txt
12
12
  Keywords: binary data,ccsds,data decoding,data encoding,data extraction,data manipulation,data processing,data transformation,lasp,packet inspection,packet parsing,python,space data systems,space packet protocol,university of colorado,xtce
@@ -53,7 +53,7 @@ Description-Content-Type: text/markdown
53
53
  [![PyPI](https://img.shields.io/pypi/v/space_packet_parser?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/space-packet-parser/)
54
54
  [![DOI](https://zenodo.org/badge/612253190.svg)](https://doi.org/10.5281/zenodo.7735001)
55
55
 
56
- [![Test Status](https://github.com/lasp/space_packet_parser/actions/workflows/tests.yml/badge.svg)](https://github.com/lasp/space_packet_parser/actions/workflows/tests.yml)
56
+ [![CI](https://github.com/lasp/space_packet_parser/actions/workflows/ci.yml/badge.svg)](https://github.com/lasp/space_packet_parser/actions/workflows/ci.yml)
57
57
  [![codecov](https://codecov.io/gh/lasp/space_packet_parser/graph/badge.svg?token=VUFIN94O05)](https://codecov.io/gh/lasp/space_packet_parser)
58
58
 
59
59
  **Documentation:** [https://space-packet-parser.readthedocs.io/en/latest/](https://space-packet-parser.readthedocs.io/en/latest/)
@@ -4,7 +4,7 @@
4
4
  [![PyPI](https://img.shields.io/pypi/v/space_packet_parser?color=blue&logo=pypi&logoColor=white)](https://pypi.org/project/space-packet-parser/)
5
5
  [![DOI](https://zenodo.org/badge/612253190.svg)](https://doi.org/10.5281/zenodo.7735001)
6
6
 
7
- [![Test Status](https://github.com/lasp/space_packet_parser/actions/workflows/tests.yml/badge.svg)](https://github.com/lasp/space_packet_parser/actions/workflows/tests.yml)
7
+ [![CI](https://github.com/lasp/space_packet_parser/actions/workflows/ci.yml/badge.svg)](https://github.com/lasp/space_packet_parser/actions/workflows/ci.yml)
8
8
  [![codecov](https://codecov.io/gh/lasp/space_packet_parser/graph/badge.svg?token=VUFIN94O05)](https://codecov.io/gh/lasp/space_packet_parser)
9
9
 
10
10
  **Documentation:** [https://space-packet-parser.readthedocs.io/en/latest/](https://space-packet-parser.readthedocs.io/en/latest/)
@@ -6,7 +6,7 @@
6
6
  <script src="https://cdn.jsdelivr.net/pyodide/v0.26.2/full/pyodide.js"></script>
7
7
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
8
8
  <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
9
- <script type="text/javascript" src="_static/pyodide_parse_packets.js"></script>
9
+ <script type="text/javascript" src="pyodide_parse_packets.js"></script>
10
10
  <style>
11
11
  body {
12
12
  font-family: Arial, sans-serif;
@@ -31,17 +31,17 @@ async function processPackets() {
31
31
  // Execute Python code to simulate opening a binary file
32
32
  await pyodide.runPythonAsync(`
33
33
  import io
34
- from space_packet_parser import ccsds
35
- from space_packet_parser.definitions import XtcePacketDefinition
34
+ import space_packet_parser as spp
36
35
 
37
36
  # Create an in-memory binary file using io.BytesIO
38
37
  packet_file_obj = io.BytesIO(packet_content.to_py())
39
38
  xtce_file_obj = io.BytesIO(xtce_content.to_py())
40
- packet_def = XtcePacketDefinition(xtce_file_obj)
39
+ packet_def = spp.load_xtce(xtce_file_obj)
41
40
 
42
- count = 0
43
- ccsds_generator = ccsds.ccsds_generator(packet_file_obj)
44
- packets = [packet_def.parse_bytes(binary_data) for binary_data in ccsds_generator]
41
+ packets = [
42
+ packet_def.parse_bytes(binary_data)
43
+ for binary_data in spp.ccsds_generator(packet_file_obj)
44
+ ]
45
45
  npackets = len(packets)
46
46
  print(f"Total packets: {npackets}")
47
47
  `);