Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

typed_bencode-0.0.1.tar.gz (4.2 kB view details)

Uploaded Source

Built Distribution

typed_bencode-0.0.1-py2.py3-none-any.whl (3.2 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file typed_bencode-0.0.1.tar.gz.

File metadata

  • Download URL: typed_bencode-0.0.1.tar.gz
  • Upload date:
  • Size: 4.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for typed_bencode-0.0.1.tar.gz
Algorithm Hash digest
SHA256 f0a4f0d05fa47cf0920cc1c8a1404a3cdad2eefae93d1caf8e5e8134ccd213a3
MD5 7a2380bc5bea660c1f2b0ee4d8b1be7c
BLAKE2b-256 8ee88ca9a6ec786248e848fe23cd86374eac1708d97164093ea7b15daceb1f39

See more details on using hashes here.

File details

Details for the file typed_bencode-0.0.1-py2.py3-none-any.whl.

File metadata

  • Download URL: typed_bencode-0.0.1-py2.py3-none-any.whl
  • Upload date:
  • Size: 3.2 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.0

File hashes

Hashes for typed_bencode-0.0.1-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5c50be9f07b9b20b6b01f426ab7582d5b82a8519a0b160e5bec5a989dc554f44
MD5 20edbc807629aa52bf6963458f1b4d00
BLAKE2b-256 04cd104decde5668fcaa604fcf6691d3b3dc6f2ba62849bb9924c1e444904705

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page