Skip to content

Commit 5c6804b

Browse files
authored
Bugfix: DES subheader load (#36)
1 parent 854576d commit 5c6804b

5 files changed

Lines changed: 22 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Fixed
11+
- `jbpy.core.DataExtensionSegment.load()` for DES subheaders with conditional, user-defined fields
12+
1013

1114
## [0.5.0] - 2025-12-16
1215

jbpy/core.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import os
2222
import re
2323
from collections.abc import Callable, Iterable
24-
from typing import Any, Iterator, Literal, Self
24+
from typing import Any, Final, Iterator, Literal, Self
2525

2626
logger = logging.getLogger(__name__)
2727

@@ -764,7 +764,7 @@ class ComponentCollection(JbpIOComponent):
764764

765765
def __init__(self, name: str):
766766
super().__init__(name)
767-
self._children: list[JbpIOComponent] = []
767+
self._children: Final[list[JbpIOComponent]] = []
768768

769769
def __eq__(self, other):
770770
if not isinstance(other, type(self)):
@@ -774,7 +774,7 @@ def __eq__(self, other):
774774
[left == right for left, right in zip(self._children, other._children)]
775775
)
776776

777-
def __len__(self):
777+
def __len__(self) -> int:
778778
return len(self._children)
779779

780780
def _contains(self, item):

jbpy/extensions/des_subheader/xml_data_content.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,14 +134,14 @@ def __init__(self, name):
134134
),
135135
]
136136

137-
def _populate_user_defined_subheader(self, desshl_field):
137+
def _populate_user_defined_subheader(self, desshl_field) -> None:
138138
if desshl_field.value not in self.allowed_subheader_lengths:
139139
logger.warning(
140140
f"Invalid user defined subheader length. {desshl_field.value} not in {self.allowed_subheader_lengths}"
141141
)
142142

143143
# remove current user-defined subheader fields
144-
self._children = self._children[: self._children.index(desshl_field) + 1]
144+
del self._children[self._children.index(desshl_field) + 1 :]
145145
current_size = 0
146146
for field in self.all_fields:
147147
if current_size == desshl_field.value:

jbpy/extensions/tre/REGPTB.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,4 +95,4 @@ def _num_pts_handler(self, field: core.Field) -> None:
9595
),
9696
)
9797
if num < num_before:
98-
self._children = self._children[: 3 + (6 * num)]
98+
del self._children[3 + (6 * num) :]

test/test_jbpy.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,19 @@ def test_roundtrip_jitc_quicklook(filename, tmp_path):
2727

2828
assert ntf == ntf2
2929

30+
file_components_to_compare = [ntf["FileHeader"]]
31+
for segtype in list(ntf.values())[1:]:
32+
file_components_to_compare.extend(x["subheader"] for x in segtype)
33+
for component in file_components_to_compare:
34+
with filename.open("rb") as f_orig, copy_filename.open("rb") as f_copy:
35+
offset = component.get_offset()
36+
size = component.get_size()
37+
f_orig.seek(offset)
38+
bytes_orig = f_orig.read(size)
39+
f_copy.seek(offset)
40+
bytes_copy = f_copy.read(size)
41+
assert bytes_orig == bytes_copy
42+
3043

3144
EXPECTED_TRES = (
3245
"BLOCKA",

0 commit comments

Comments
 (0)