Skip to main content

A Python SDK for Somnia data streams with first class reactivity support

Reason this release was yanked:

bugs

Project description

Somnia Data Streams Python SDK

The Somnia Data Streams Python SDK enables streaming data on-chain, integrated with off-chain reactivity to unlock new paradigms in the blockchain ecosystem.

Features

  • Easy and intuitive interface and flow
  • Consistent with Somnia Data Streams JS/TS SDK
  • Schema encoding and decoding for structured data
  • Type-safe API with comprehensive type definitions
  • Asynchronized architecture for better CPU utilization on high load
  • Extensive unit tests and integration tests

Installation

pip install somnia-data-streams-sdk

Quick Start

Initialize the SDK

from somnia_data_streams_sdk import SDK, SOMNIA_TESTNET

# Read-only access (no private key needed)
sdk = SDK.create_for_chain(SOMNIA_TESTNET["id"])

# With write access (provide private key for transaction signing)
sdk = SDK.create_for_chain(SOMNIA_TESTNET["id"], private_key="0x...")

Get All Registered Schemas

schemas = await sdk.streams.get_all_schemas()
for i, schema in enumerate(schemas):
    print(f"{i+1}. {schema}")

Compute Schema ID

test_schema = "uint256 balance, address owner"
schema_id = await sdk.streams.compute_schema_id(test_schema)
print(f"\nSchema ID for '{test_schema}': {schema_id}")

Check if Schema is Registered

is_registered = await sdk.streams.is_data_schema_registered(schema_id)
print(f"Schema registered: {is_registered}")

Schema Encoding/Decoding

encoder = SchemaEncoder("uint256 balance, address owner")
encoded = encoder.encode_data([
    SchemaItem(name="balance", type="uint256", value=666),
    SchemaItem(name="owner", type="address", value="0x7e5f4552091a69125d5dfcb7b8c2659029395bdf"),
])
print(f"Encoded Schema: {encoded}")

decoded = encoder.decode_data(encoded)
print("Decoded Schema:")
for item in decoded:
    print(f"  {item.name} ({item.type}): {item.value.value}")

Register a Schema (Consumes Gas)

registrations = [
    DataSchemaRegistration(
        id="your-unique-id-here-otherwise-wont-register",
        schema=test_schema,
        parent_schema_id=None
    )
]
tx_hash = await sdk.streams.register_data_schemas(registrations)
if tx_hash and isinstance(tx_hash, str) and tx_hash.startswith("0x"):
    print(f"Schema registered! TX: {tx_hash}")
else:
    print("Schema already registered or registration error")

Publish Data

data_id = to_hex(keccak(text="your-unique-id-here-for-this-data"))
data_streams = [
    DataStream(
        id=data_id,
        schema_id=schema_id,
        data=encoded,
    )
]
tx_hash = await sdk.streams.set(data_streams)
if tx_hash:
    print(f"Data published! TX: {tx_hash}")
else:
    print("Data publishing failed")

Read Data

data = await sdk.streams.get_all_publisher_data_for_schema(
    schema_id=schema_id,
    publisher=sdk.streams.web3_client.client.account.address,
)
    
if data:
    print(f"Found {len(data)} data points")
    if isinstance(data[0], list):  # Decoded data
        for i, decoded_items in enumerate(data):
            print(f"\nData point {i+1}:")
            for item in decoded_items:
                print(f"  {item.name}: {item.value.value}")
    else:  # Raw data
        print("Raw data (schema not public):", data)

API Reference

Main Classes

  • SDK - Main SDK class for interacting with Somnia Data Streams
  • SchemaEncoder - Encode and decode data schemas

Chain Configuration

  • SOMNIA_TESTNET - Testnet configuration (Chain ID: 50312)
  • SOMNIA_MAINNET - Mainnet configuration (Chain ID: 5031)
  • get_chain_config(chain_id) - Get chain configuration by ID
  • get_default_rpc_url(chain_id) - Get default RPC URL for a chain

Frequently Used Types

  • SubscriptionInitParams
  • SchemaItem, SchemaDecodedItem
  • EventParameter, EventSchema, EventStream
  • DataStream, DataSchemaRegistration

Contribution Guide

If it's bug fix or code improvement (i.e. not a new feature), please make sure your code passes all tests before submitting a PR.

pytest -v -s

If it's a new feature, don't forget to write unit tests and integration tests for it.

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

somnia_data_streams_sdk-0.9.5.1.tar.gz (23.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

somnia_data_streams_sdk-0.9.5.1-py3-none-any.whl (26.3 kB view details)

Uploaded Python 3

File details

Details for the file somnia_data_streams_sdk-0.9.5.1.tar.gz.

File metadata

File hashes

Hashes for somnia_data_streams_sdk-0.9.5.1.tar.gz
Algorithm Hash digest
SHA256 e451db474ea13733cdbda6c86142ce7798b6ae67b2f3d76f64d682128ca9b723
MD5 552fe008f8de043d6b2d2ff1e3d64d2a
BLAKE2b-256 0ca16cab93248a765e7b41280b2018a38ae12043551a40743becd6e167c3e736

See more details on using hashes here.

File details

Details for the file somnia_data_streams_sdk-0.9.5.1-py3-none-any.whl.

File metadata

File hashes

Hashes for somnia_data_streams_sdk-0.9.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0692901a3729519e6ced842436158b3cc43916a9fe9f65a43cd5da2d711b1500
MD5 dcd744ff34d9d43f1994bff23f88f139
BLAKE2b-256 a0e0f1617cd86ba566bf19d569383ab8ccc552654bfc3a22998ad70f9c0bb490

See more details on using hashes here.

Supported by

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