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.
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/.gitignore +7 -2
- space_packet_parser-6.2.0/CHANGELOG.md +391 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/CITATION.cff +1 -4
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/PKG-INFO +4 -4
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/README.md +1 -1
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/browser-parsing.html +1 -1
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/pyodide_parse_packets.js +6 -6
- space_packet_parser-6.2.0/docs/source/benchmarking.md +256 -0
- space_packet_parser-6.2.0/docs/source/browser_demo.md +15 -0
- space_packet_parser-6.2.0/docs/source/changelog.md +3 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/conf.py +2 -1
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/developers.md +20 -29
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/examples.md +7 -2
- space_packet_parser-6.2.0/docs/source/getting_started.md +203 -0
- space_packet_parser-6.2.0/docs/source/index.md +18 -0
- space_packet_parser-6.2.0/docs/source/user_guide/error_handling.md +92 -0
- space_packet_parser-6.2.0/docs/source/user_guide/generators.md +95 -0
- space_packet_parser-6.2.0/docs/source/user_guide/index.md +34 -0
- space_packet_parser-6.2.0/docs/source/user_guide/packets_and_parameters.md +190 -0
- space_packet_parser-6.2.0/docs/source/user_guide/performance.md +64 -0
- space_packet_parser-6.2.0/docs/source/user_guide/sockets.md +17 -0
- space_packet_parser-6.2.0/docs/source/user_guide/variable_length_fields.md +112 -0
- space_packet_parser-6.2.0/docs/source/user_guide/xarray.md +54 -0
- space_packet_parser-6.2.0/docs/source/user_guide/xtce_validation.md +112 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/pyproject.toml +5 -3
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/__init__.py +2 -1
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/cli.py +32 -1
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/utils.py +9 -9
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/definitions.py +15 -9
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/encodings.py +8 -8
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/parameter_types.py +49 -37
- space_packet_parser-6.2.0/space_packet_parser/xtce/schemas/README.md +19 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/validation.py +378 -62
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/conftest.py +38 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_cli.py +2 -1
- space_packet_parser-6.2.0/tests/test_data/SpaceSystem.xsd +5918 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_parameter_types.py +139 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_validation.py +80 -36
- space_packet_parser-6.2.0/tests/unit/test_xtce/test_validation_security.py +257 -0
- space_packet_parser-6.1.2/docs/source/benchmarking.md +0 -121
- space_packet_parser-6.1.2/docs/source/browser-demo.rst +0 -5
- space_packet_parser-6.1.2/docs/source/changelog.md +0 -199
- space_packet_parser-6.1.2/docs/source/contents.rst +0 -11
- space_packet_parser-6.1.2/docs/source/index.rst +0 -7
- space_packet_parser-6.1.2/docs/source/users.md +0 -665
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/LICENSE.txt +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/Makefile +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/logo-no-background.png +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/csv_to_xtce_conversion.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/packet_filtering.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/parsing_and_plotting_idex_waveforms_from_socket.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/examples/parsing_to_xarray_dataset.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/common.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/definitions.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/exceptions.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/ccsds.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/fixed_length.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/generators/udp.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/packets.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xarr.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/calibrators.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/comparisons.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/containers.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/space_packet_parser/xtce/parameters.py +0 -0
- {space_packet_parser-6.1.2/tests/test_data → space_packet_parser-6.2.0/space_packet_parser/xtce/schemas}/SpaceSystem.xsd +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/test_fast_benchmarks.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/test_slow_benchmarks.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/benchmark/test_xtce_parsing_benchmarks.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_bufferedreader_parsing.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_socket_parsing.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xarr.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_ctim_parsing.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_inheritance_restrictions.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_jpss_parsing.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/integration/test_xtce_based_parsing/test_suda_parsing.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/ctim/ccsds_2021_155_14_39_51 +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/ctim/ctim_xtce_v1.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/idex/idex_combined_science_definition.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/idex/sciData_2023_052_14_45_05 +0 -0
- {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
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/jpss/ccsdspy_jpss1_geolocation.csv +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/jpss/contrived_inheritance_structure.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/jpss/jpss1_geolocation_xtce_v1.xml +0 -0
- {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
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/suda/suda_combined_science_definition.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce_4byte.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce_default_namespace.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/test_xtce_no_namespace.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/test_data/udp_packet.xml +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_common.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_ccsds.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_fixed_length.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_udp.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_generators/test_utils.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_space_packet_parser.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xarr.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/__init__.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_calibrators.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_comparisons.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_containers.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_definitions.py +0 -0
- {space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/tests/unit/test_xtce/test_encodings.py +0 -0
- {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.
|
|
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.
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
2
|
Name: space_packet_parser
|
|
3
|
-
Version: 6.
|
|
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
|
|
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
|
[](https://pypi.org/project/space-packet-parser/)
|
|
54
54
|
[](https://doi.org/10.5281/zenodo.7735001)
|
|
55
55
|
|
|
56
|
-
[](https://github.com/lasp/space_packet_parser/actions/workflows/ci.yml)
|
|
57
57
|
[](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
|
[](https://pypi.org/project/space-packet-parser/)
|
|
5
5
|
[](https://doi.org/10.5281/zenodo.7735001)
|
|
6
6
|
|
|
7
|
-
[](https://github.com/lasp/space_packet_parser/actions/workflows/ci.yml)
|
|
8
8
|
[](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/)
|
{space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/browser-parsing.html
RENAMED
|
@@ -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="
|
|
9
|
+
<script type="text/javascript" src="pyodide_parse_packets.js"></script>
|
|
10
10
|
<style>
|
|
11
11
|
body {
|
|
12
12
|
font-family: Arial, sans-serif;
|
{space_packet_parser-6.1.2 → space_packet_parser-6.2.0}/docs/source/_static/pyodide_parse_packets.js
RENAMED
|
@@ -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
|
-
|
|
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 =
|
|
39
|
+
packet_def = spp.load_xtce(xtce_file_obj)
|
|
41
40
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
`);
|