Skip to main content

JCE Encode/Decode

Project description

Jce Struct

Tencent JCE Encode/Decode with fully pydantic support

Before Using

JceStruct is base on python type hint (doc) and Pydantic.

Read links above if first time using type hint or pydantic model.

Data validation and IDE type checking are all supported.

Installation

Install directly

pip install JceStruct
# or
poetry add JceStruct

or install from source (using poetry)

pip install git+https://github.com/yanyongyu/JceStruct.git
# or
poetry add git+https://github.com/yanyongyu/JceStruct.git

or clone and install

git clone https://github.com/yanyongyu/JceStruct.git
cd JceStruct
poetry install  # with editable mode

Usage

Create Struct

Create your struct by inheriting JceStruct and define your fields with JceField.

You can also combine your model fields with typing Optional, Union...

from jce import types, JceStruct, JceField


class ExampleStruct(JceStruct):
    # normal definition
    field1: types.INT32 = JceField(jce_id=1)
    # define type in options
    field2: float = JceField(jce_id=2, jce_type=types.DOUBLE)
    # define an optional field with default value
    field3: Optional[types.BOOL] = JceField(None, jce_id=3)
    # nested struct supported
    field4: types.LIST[OtherStruct] = JceField(types.LIST(), jce_id=4)
    # optional other pydantic field
    extra_pydantic_field: str = "extra_pydantic_field"

Encode/Decode

You can initialize a struct and encode it, or encode single field using to_bytes method.

# simple struct encode
example: ExampleStruct = ExampleStruct(
    field1=1, field2=2., field4=types.LIST[OtherStruct()]
)
bytes = example.encode()

# single field encode
bytes = types.STRING.to_bytes(jce_id=0, value="example")

You can decode bytes using decode classmethod of the struct, decode single field using from_bytes classmethod, or only get single list field using decode_list method of list inner struct.

# simple struct decode
example: ExampleStruct = ExampleStruct.decode(bytes, extra_pydantic_field="extra")

# single field decode
string, length = types.STRING.from_bytes(data=bytes, **extra)

# decode list from example struct
others: List[OtherStruct] = OtherStruct.decode_list(bytes, jce_id=3, **extra)

Custom Encoder/Decoder

Just inherit JceEncoder/JceDecoder and add it to your struct configuration.

from jce import JceStruct, JceEncoder


class CustomEncoder(JceEncoder):
    pass


class ExampleStruct(JceStruct):

    class Config:
        jce_encoder = CustomEncoder
        # jce_decoder = CustomDecoder

Custom types

Just inherit JceType and implement abstruct methods

from jce import types


class CustomType(types.JceType):
    ...

Change default types

By default, head bytes are treated like this:

{
    0: BYTE,
    1: INT16,
    2: INT32,
    3: INT64,
    4: FLOAT,
    5: DOUBLE,
    6: STRING1,
    7: STRING4,
    8: MAP,
    9: LIST,
    10: STRUCT_START,
    11: STRUCT_END,
    12: ZERO_TAG,
    13: BYTES
}

field will be converted to the type defined in struct when validate.

to change it:

class ExampleStruct(JceStruct):

    class Config:
        jce_default_type = {
            # add all types here
        }

Command Line Usage

python -m jce 1f2e3d4c5b6a79

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

JceStruct-0.1.5.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

JceStruct-0.1.5-py3-none-any.whl (9.0 kB view details)

Uploaded Python 3

File details

Details for the file JceStruct-0.1.5.tar.gz.

File metadata

  • Download URL: JceStruct-0.1.5.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.9.7 Linux/5.4.0-91-generic

File hashes

Hashes for JceStruct-0.1.5.tar.gz
Algorithm Hash digest
SHA256 c465d3ed91c64a0ca23b34c4f1fee66987d9fb7346934a4b160d3a5222ef7e0e
MD5 8bb7479382939ef89331b0dda8a7eb2e
BLAKE2b-256 d90157f77fffcd9e9999f3abd6e0457f03ea9970064f4ead0729edf20e086445

See more details on using hashes here.

File details

Details for the file JceStruct-0.1.5-py3-none-any.whl.

File metadata

  • Download URL: JceStruct-0.1.5-py3-none-any.whl
  • Upload date:
  • Size: 9.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.12 CPython/3.9.7 Linux/5.4.0-91-generic

File hashes

Hashes for JceStruct-0.1.5-py3-none-any.whl
Algorithm Hash digest
SHA256 638f847ac436522ff905bccbba53c1abede91ed0a08434fa0238742edd61fda8
MD5 a7806db688324981385b2526156dd591
BLAKE2b-256 437ad7a96dbb972455fe33668f2789633db0147ad6bdaa5630a3028a38951cd9

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