Python BinField implementation for binary data manipulation
Project description
binfield
Python binfield implementation for binary data manipulation.
Pros:
Free software: Apache license
Open Source: https://github.com/penguinolog/binfield
Self-documented code: docstrings with types in comments
Tested: see bages on top
Support miltiple Python versions:
Python 2.7 Python 3.4 Python 3.5 Python 3.6 PyPy
Usage
Not mapped objects could be created simply from BinField class:
bf = BinField(42)
Data with fixed size should be created as new class (type):
class TwoBytes(BinField):
_size_ = 16 # Size in bits
bf = TwoBytes(42)
2 == len(bf) # Length is in bytes for easier conversion to bytes
Also binary mask could be attached and data will be always conform with it:
class MyBinField(BinField):
_mask_ = 0b11
_size_ = 8
bf = MyBinField(5)
0b001 == bf # Mask was applied and 0b101 & 0b011 = 0b001
Mapped objects is also should be created as new class (type):
class MyBinField(BinField):
first = 0 # Single bit
two_bits = [1, 3] # Also could be mapped as tuple and slice
_mask_ = 0b1011
bf = MyBinField(0b1101)
0b1001 == bf
4 == bf._size_ # Size is generated during creation from mask
0b01 == bf.two_bits._mask_ # Mask is inherited from parent object
Nested mapping is supported:
class MyBinField(BinField):
first = 0 # Single bit
two_bits = [1, 3] # Also could be mapped as tuple and slice
nested = {
'_index_': [3, 8], # Index is mandatory, it should be slice, list or tuple
'nested_bit': 0, # In nested objects use relative indexing
'nested_bits': [1, 3]
}
# Nested objects could contain less indexed area, than block size,
# but mask will be calculated from outer level indexes only.
bf = MyBinField(0xFF)
0b00011111 == bf.nested
# Nested received (generated as all bits in range) mask from top
# and size from slice
1 == bf.nested.nested_bit # __getitem__ and properties is available
bf.nested.nested_bit = 0 # property has setters
0b11110111 == bf # Change on nested is returned to main object
Note: negative indexes is not supported by design!
Testing
The main test mechanism for the package binfield is using tox. Test environments available:
pep8 py27 py34 py35 pypy pylint
CI systems
For code checking several CI systems is used in parallel:
Travis CI: is used for checking: PEP8, pylint, bandit, installation possibility and unit tests. Also it’s publishes coverage on coveralls.
coveralls: is used for coverage display.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for BinField-0.2.0-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 257e32f18d91543c409ef604d508d529123a4cad7cbcf868185590016e9ab339 |
|
MD5 | d23db01f115ae6f08d42a7dc040d6e51 |
|
BLAKE2b-256 | 0b9e3a999cff5e8b8affb5f9695220e548ebad9193713c0572c9d07561d869b4 |