1 # SPDX-License-Identifier: GPL-2.0-only
3 # Copyright (C) 2023 EfficiOS Inc.
5 # pyright: strict, reportTypeCommentUsage=false
15 def _make_ctf_1_metadata(payload_fc
: str):
16 payload_fc
= payload_fc
.strip()
19 payload_fc
= payload_fc
.replace("@", "root")
23 return string
.Template(
33 typealias integer { size = 8; } := u8;
34 typealias integer { size = 16; } := u16;
35 typealias integer { size = 32; } := u32;
36 typealias integer { size = 64; } := u64;
37 typealias integer { size = 8; byte_order = le; } := u8le;
38 typealias integer { size = 16; byte_order = le; } := u16le;
39 typealias integer { size = 32; byte_order = le; } := u32le;
40 typealias integer { size = 64; byte_order = le; } := u64le;
41 typealias integer { size = 8; byte_order = be; } := u8be;
42 typealias integer { size = 16; byte_order = be; } := u16be;
43 typealias integer { size = 32; byte_order = be; } := u32be;
44 typealias integer { size = 64; byte_order = be; } := u64be;
45 typealias integer { signed = true; size = 8; } := i8;
46 typealias integer { signed = true; size = 16; } := i16;
47 typealias integer { signed = true; size = 32; } := i32;
48 typealias integer { signed = true; size = 64; } := i64;
49 typealias integer { signed = true; size = 8; byte_order = le; } := i8le;
50 typealias integer { signed = true; size = 16; byte_order = le; } := i16le;
51 typealias integer { signed = true; size = 32; byte_order = le; } := i32le;
52 typealias integer { signed = true; size = 64; byte_order = le; } := i64le;
53 typealias integer { signed = true; size = 8; byte_order = be; } := i8be;
54 typealias integer { signed = true; size = 16; byte_order = be; } := i16be;
55 typealias integer { signed = true; size = 32; byte_order = be; } := i32be;
56 typealias integer { signed = true; size = 64; byte_order = be; } := i64be;
57 typealias floating_point { exp_dig = 8; mant_dig = 24; } := flt32;
58 typealias floating_point { exp_dig = 11; mant_dig = 53; } := flt64;
59 typealias floating_point { exp_dig = 8; mant_dig = 24; byte_order = le; } := flt32le;
60 typealias floating_point { exp_dig = 11; mant_dig = 53; byte_order = le; } := flt64le;
61 typealias floating_point { exp_dig = 8; mant_dig = 24; byte_order = be; } := flt32be;
62 typealias floating_point { exp_dig = 11; mant_dig = 53; byte_order = be; } := flt64be;
63 typealias string { encoding = UTF8; } := nt_str;
72 ).substitute(payload_fc
=payload_fc
)
75 def _make_ctf_1_data(normand_text
: str):
76 # Default to little-endian because that's also the TSDL default in
77 # _make_ctf_1_metadata() above.
78 return normand
.parse("!le\n" + normand_text
).data
81 def _create_files_from_mp(mp_path
: str, output_dir
: str):
82 trace_dir
= os
.path
.join(output_dir
, "trace")
83 expect_path
= os
.path
.join(output_dir
, "expect")
84 metadata_path
= os
.path
.join(trace_dir
, "metadata")
85 data_path
= os
.path
.join(trace_dir
, "data")
86 os
.makedirs(trace_dir
, exist_ok
=True)
88 with
open(mp_path
, "r") as f
:
89 parts
= moultipart
.parse(f
)
91 with
open(metadata_path
, "w") as f
:
92 f
.write(_make_ctf_1_metadata(parts
[0].content
))
94 with
open(data_path
, "wb") as f
:
95 f
.write(_make_ctf_1_data(parts
[1].content
))
97 with
open(expect_path
, "w") as f
:
98 f
.write(parts
[2].content
)
101 if __name__
== "__main__":
102 parser
= argparse
.ArgumentParser()
104 "mp_path", metavar
="MP-PATH", help="moultipart document to process"
108 metavar
="OUTPUT-DIR",
109 help="output directory for the CTF trace and expectation file",
111 args
= parser
.parse_args()
112 _create_files_from_mp(args
.mp_path
, args
.output_dir
)
This page took 0.030567 seconds and 4 git commands to generate.