Skip to content

Commit 8465c42

Browse files
authored
Merge pull request #26 from gburca/master
Fix handling of repeating groups with padding
2 parents 0e7016e + b2bcec5 commit 8465c42

4 files changed

Lines changed: 11 additions & 4 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
/dist/
33
/sbe.egg-info/
44
__pycache__/
5+
.venv
6+
.eggs

sbe/__init__.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -758,8 +758,12 @@ def _walk_fields_encode(schema: Schema, fields: List[Union[Group, Field]],
758758
f.blockLength, Cursor(0))
759759
if block_length is None:
760760
block_length = struct.calcsize("<" + ''.join(fmt1))
761+
if f.blockLength:
762+
assert f.blockLength >= block_length
763+
if f.blockLength and f.blockLength > block_length:
764+
fmt1.append(str(f.blockLength - block_length) + 'x')
761765

762-
dimension = {"numInGroup": len(obj[f.name]), "blockLength": block_length or f.blockLength or 0}
766+
dimension = {"numInGroup": len(obj[f.name]), "blockLength": f.blockLength or block_length or 0}
763767
dimension_fmt = _pack_format(schema, f.dimensionType)
764768

765769
fmt.extend(dimension_fmt)

tests/dat/example-schema.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@
8080
</sbe:message>
8181
<sbe:message name="TestBlockLength" id="3" blockLength="4">
8282
<field name="year" id="1" type="ModelYear"/>
83-
<group name="AGroup" id="2" dimensionType="groupSizeEncoding" blbockLength="6">
83+
<group name="AGroup" id="2" dimensionType="groupSizeEncoding" blockLength="6">
8484
<field name="numbers" id="1" type="someNumbers"/>
8585
</group>
8686
</sbe:message>

tests/test_sbe.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,10 @@ def test_blockLength():
3030
{'numbers': 456}]})
3131
# BlockHeader = 8b
3232
# Body = 2b year + 2b padding
33+
# GroupHeader = 4b
3334
# Repeating group = 2 * (4b numbers + 2b padding)
34-
expLen = 8 + 4 + 2*6
35-
assert len(encoded) == expLen, "Encoded SBE not padded properly"
35+
expLen = 8 + 4 + 4 + 2*6
36+
assert len(encoded) == expLen, f"Encoded SBE not padded properly. Expected {expLen} actual {len(encoded)}"
3637

3738
decoded = s.decode(encoded)
3839
assert decoded.value['year'] == 1990

0 commit comments

Comments
 (0)