A bencoder that allows mixing string & bytes without the guesswork
Project description
TypedBencode
Make it easy to create round-trippable bencoding for objects.
Usage
import typed_bencode from typing import List my_type = typed_bencode.for_dict(a=str, b=int, c=bytes, d=List[str]) val = {"a": "hello", "b": 123, "c": b'asd', "d":["hey", "there"]} encoded = my_type.encode(val) print(encoded) # => b'd1:a5:hello1:bi123e1:c3:asd1:dl3:hey5:thereee' print(my_type.decode(encoded) == val) # => True
You can even compose types
my_other_type = typed_bencode.for_dict(a=my_type, b=int) encoded2 = my_other_type.encode({"a": {"a": "helo", "b": 123, "c": b'asd', "d": ["asd", "asd"]}, "b":123}) print(encoded2) # => b'd1:ad1:a4:helo1:bi123e1:c3:asd1:dl3:asd3:asdee1:bi123ee'
Custom types
You can specify a custom type
class DateEncoder(typed_bencode.StringEncoder): def to_bytes(self, val): return super().to_bytes(val.isoformat()) class DateDecoder(typed_bencode.StringDecoder): def from_bytes(self, b): v, pos = super().from_bytes(b) return (datetime.datetime.fromisoformat(v), pos) class DateType(typed_bencode.BaseType): def __init__(self): super().__init__() self.encoder = DateEncoder(self) self.decoder = DateDecoder(self) my_type = DateType() val = datetime.datetime.now() encoded = my_type.encode(val) # => '26:2018-06-06T12:12:12.363636'
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.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size typed_bencode-0.0.1-py2.py3-none-any.whl (3.2 kB) | File type Wheel | Python version py2.py3 | Upload date | Hashes View |
Filename, size typed_bencode-0.0.1.tar.gz (4.2 kB) | File type Source | Python version None | Upload date | Hashes View |
Close
Hashes for typed_bencode-0.0.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5c50be9f07b9b20b6b01f426ab7582d5b82a8519a0b160e5bec5a989dc554f44 |
|
MD5 | 20edbc807629aa52bf6963458f1b4d00 |
|
BLAKE2-256 | 04cd104decde5668fcaa604fcf6691d3b3dc6f2ba62849bb9924c1e444904705 |