Python

Serializing

Overview

The serializing module in ducpy provides functions to convert Python objects into the duc file format. These functions transform structured Python objects back into the FlatBuffers binary format for storage or transmission.

Main Functions

Serialize to Duc File

The main function for serializing a complete duc file:

from ducpy import serialize
 
# Prepare your data
elements = [...]  # List of DucElement objects
app_state = ...   # AppState object
files = ...       # BinaryFiles object
 
# Serialize to a file
with open('output.duc', 'wb') as f:
    serialize.serialize_to_flatbuffers(elements, app_state, files, f)

Serialize Individual Components

You can also serialize individual components of a duc file:

Serialize Duc Elements

from ducpy.serialize import serialize_duc_element
 
# Serialize a single element
builder = flatbuffers.Builder(0)
element_offset = serialize_duc_element(builder, element)

Serialize App State

from ducpy.serialize import serialize_app_state
 
# Serialize the application state
builder = flatbuffers.Builder(0)
app_state_offset = serialize_app_state(builder, app_state)

Serialize Binary Files

from ducpy.serialize import serialize_binary_files
 
# Serialize binary files
builder = flatbuffers.Builder(0)
files_offset = serialize_binary_files(builder, files)

Input Data Structure

When serializing a duc file, you need to provide:

  • elements: A list of DucElementUnion objects representing all elements in the file
  • app_state: An AppState object containing application state information
  • files: A BinaryFiles object containing any binary files to embed in the duc file

Custom Serialization

For advanced use cases, you can create a custom serialization process:

import flatbuffers
from ducpy.serialize import (
    serialize_duc_element,
    serialize_app_state,
    serialize_binary_files
)
from ducpy.Duc.ExportedDataState import ExportedDataStateStart, ExportedDataStateEnd
from ducpy.Duc.ExportedDataState import ExportedDataStateAddElements, ExportedDataStateAddAppState, ExportedDataStateAddFiles
 
# Create a builder
builder = flatbuffers.Builder(0)
 
# Serialize components
elements_vector = []
for element in elements:
    elements_vector.append(serialize_duc_element(builder, element))
 
elements_offset = builder.CreateVector(elements_vector)
app_state_offset = serialize_app_state(builder, app_state)
files_offset = serialize_binary_files(builder, files)
 
# Start building the root object
ExportedDataStateStart(builder)
ExportedDataStateAddElements(builder, elements_offset)
ExportedDataStateAddAppState(builder, app_state_offset)
ExportedDataStateAddFiles(builder, files_offset)
 
# Set additional properties if needed
if type_str:
    type_offset = builder.CreateString(type_str)
    ExportedDataStateAddType(builder, type_offset)
 
if version:
    ExportedDataStateAddVersion(builder, version)
 
if source:
    source_offset = builder.CreateString(source)
    ExportedDataStateAddSource(builder, source_offset)
 
# Finish building
data_offset = ExportedDataStateEnd(builder)
builder.Finish(data_offset)
 
# Get the serialized data
buf = builder.Output()
 
# Write to a file
with open('custom_output.duc', 'wb') as f:
    f.write(buf)
Edit on GitHub

Last updated on