Core API: Adapters and Validators¶
- construct.ExprAdapter(subcon, decoder, encoder)¶
Generic adapter that takes decoder and encoder lambdas as parameters. You can use ExprAdapter instead of writing a full-blown class deriving from Adapter when only a simple lambda is needed.
- Parameters:
subcon – Construct instance, subcon to adapt
decoder – lambda that takes (obj, context) and returns an decoded version of obj
encoder – lambda that takes (obj, context) and returns an encoded version of obj
Example:
>>> d = ExprAdapter(Byte, obj_+1, obj_-1) >>> d.parse(b'\x04') 5 >>> d.build(5) b'\x04'
- construct.ExprSymmetricAdapter(subcon, encoder)¶
Macro around
ExprAdapter
.- Parameters:
subcon – Construct instance, subcon to adapt
encoder – lambda that takes (obj, context) and returns both encoded version and decoded version of obj
Example:
>>> d = ExprSymmetricAdapter(Byte, obj_ & 0b00001111) >>> d.parse(b"ÿ") 15 >>> d.build(255) b''
- construct.ExprValidator(subcon, validator)¶
Generic adapter that takes validator lambda as parameter. You can use ExprValidator instead of writing a full-blown class deriving from Validator when only a simple lambda is needed.
- Parameters:
subcon – Construct instance, subcon to adapt
validator – lambda that takes (obj, context) and returns a bool
Example:
>>> d = ExprValidator(Byte, obj_ & 0b11111110 == 0) >>> d.build(1) b'\x01' >>> d.build(88) ValidationError: object failed validation: 88
- construct.OneOf(subcon, valids)¶
Validates that the object is one of the listed values, both during parsing and building.
Note
For performance, valids should be a set or frozenset.
- Parameters:
subcon – Construct instance, subcon to validate
valids – collection implementing __contains__, usually a list or set
- Raises:
ValidationError – parsed or build value is not among valids
Example:
>>> d = OneOf(Byte, [1,2,3]) >>> d.parse(b"\x01") 1 >>> d.parse(b"\xff") construct.core.ValidationError: object failed validation: 255
- construct.NoneOf(subcon, invalids)¶
Validates that the object is none of the listed values, both during parsing and building.
Note
For performance, valids should be a set or frozenset.
- Parameters:
subcon – Construct instance, subcon to validate
invalids – collection implementing __contains__, usually a list or set
- Raises:
ValidationError – parsed or build value is among invalids
- construct.Filter(predicate, subcon)¶
Filters a list leaving only the elements that passed through the predicate.
- Parameters:
subcon – Construct instance, usually Array GreedyRange Sequence
predicate – lambda that takes (obj, context) and returns a bool
Can propagate any exception from the lambda, possibly non-ConstructError.
Example:
>>> d = Filter(obj_ != 0, Byte[:]) >>> d.parse(b"\x00\x02\x00") [2] >>> d.build([0,1,0,2,0]) b'\x01\x02'
- construct.Slicing(subcon, count, start, stop, step=1, empty=None)¶
Adapter for slicing a list. Works with GreedyRange and Sequence.
- Parameters:
subcon – Construct instance, subcon to slice
count – integer, expected number of elements, needed during building
start – integer for start index (or None for entire list)
stop – integer for stop index (or None for up-to-end)
step – integer, step (or 1 for every element)
empty – object, value to fill the list with, during building
Example:
d = Slicing(Array(4,Byte), 4, 1, 3, empty=0) assert d.parse(b"\x01\x02\x03\x04") == [2,3] assert d.build([2,3]) == b"\x00\x02\x03\x00" assert d.sizeof() == 4
- construct.Indexing(subcon, count, index, empty=None)¶
Adapter for indexing a list (getting a single item from that list). Works with Range and Sequence and their lazy equivalents.
- Parameters:
subcon – Construct instance, subcon to index
count – integer, expected number of elements, needed during building
index – integer, index of the list to get
empty – object, value to fill the list with, during building
Example:
d = Indexing(Array(4,Byte), 4, 2, empty=0) assert d.parse(b"\x01\x02\x03\x04") == 3 assert d.build(3) == b"\x00\x00\x03\x00" assert d.sizeof() == 4