pymcap-cli 0.5.0__tar.gz → 0.6.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.
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/PKG-INFO +1 -1
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/pyproject.toml +1 -1
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/core/mcap_processor.py +26 -2
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/README.md +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/__init__.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cli.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/__init__.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/_run_processor.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/bag2mcap_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/cat_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/compress_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/convert_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/diag_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/du_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/filter_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/info_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/info_json_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/list_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/merge_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/plot_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/process_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/rechunk_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/records_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/recover_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/recover_inplace_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/roscompress_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/rosdecompress_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/tftree_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/topic_chunks_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/cmd/video_cmd.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/core/__init__.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/core/input_handler.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/core/mcap_transform.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/core/msg_resolver.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/core/processors.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/debug_wrapper.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/display/__init__.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/display/display_utils.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/display/osc_utils.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/display/sparkline.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/__init__.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/decompress.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/encoder_common.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/pointcloud.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/video_factory.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/video_ffmpeg.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/video_protocols.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/encoding/video_pyav.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/http_utils.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/info_types.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/py.typed +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/rosbag_reader/__init__.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/rosbag_reader/_reader.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/rosbag_reader/_types.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/rosbag_reader/py.typed +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/types/__init__.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/types/info_data.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/types/info_link.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/types/info_types.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/types/types_manual.py +0 -0
- {pymcap_cli-0.5.0 → pymcap_cli-0.6.0}/src/pymcap_cli/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pymcap-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.6.0
|
|
4
4
|
Summary: High-performance Python CLI for MCAP file processing with advanced recovery, filtering, and optimization capabilities
|
|
5
5
|
Keywords: mcap,cli,robotics,ros,ros2,recovery,filtering,compression
|
|
6
6
|
Author: Marko Bausch
|
|
@@ -29,6 +29,7 @@ from small_mcap import (
|
|
|
29
29
|
Schema,
|
|
30
30
|
Statistics,
|
|
31
31
|
breakup_chunk,
|
|
32
|
+
get_header,
|
|
32
33
|
get_summary,
|
|
33
34
|
stream_reader,
|
|
34
35
|
)
|
|
@@ -57,6 +58,7 @@ from pymcap_cli.utils import (
|
|
|
57
58
|
)
|
|
58
59
|
|
|
59
60
|
console = Console()
|
|
61
|
+
OUTPUT_LIBRARY = "pymcap-cli"
|
|
60
62
|
|
|
61
63
|
|
|
62
64
|
@dataclass(slots=True)
|
|
@@ -692,8 +694,8 @@ class McapProcessor:
|
|
|
692
694
|
writer.schemas = self.schemas
|
|
693
695
|
writer.channels = self.channels
|
|
694
696
|
|
|
695
|
-
|
|
696
|
-
writer.start()
|
|
697
|
+
header = self._resolve_output_header()
|
|
698
|
+
writer.start(profile=header.profile, library=header.library)
|
|
697
699
|
|
|
698
700
|
try:
|
|
699
701
|
# Pre-load schemas and channels from all files' summaries
|
|
@@ -878,3 +880,25 @@ class McapProcessor:
|
|
|
878
880
|
f"[yellow]Warning (stream {stream_id}): Failed to decode chunk: {e}[/yellow]"
|
|
879
881
|
)
|
|
880
882
|
self.stats.errors_encountered += 1
|
|
883
|
+
|
|
884
|
+
def _resolve_output_header(self) -> Header:
|
|
885
|
+
"""Choose output header metadata from readable inputs.
|
|
886
|
+
|
|
887
|
+
The output library should identify this tool. The profile is preserved only when
|
|
888
|
+
all readable input headers agree, which covers the common merge/recover case.
|
|
889
|
+
"""
|
|
890
|
+
profiles: set[str] = set()
|
|
891
|
+
|
|
892
|
+
for input_file in self.options.inputs:
|
|
893
|
+
input_stream = input_file.stream
|
|
894
|
+
original_position = input_stream.tell()
|
|
895
|
+
try:
|
|
896
|
+
header = get_header(input_stream)
|
|
897
|
+
except McapError:
|
|
898
|
+
continue
|
|
899
|
+
finally:
|
|
900
|
+
input_stream.seek(original_position)
|
|
901
|
+
profiles.add(header.profile)
|
|
902
|
+
|
|
903
|
+
profile = profiles.pop() if len(profiles) == 1 else ""
|
|
904
|
+
return Header(profile=profile, library=OUTPUT_LIBRARY)
|
|
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
|
|
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
|