Skip to main content

Overview

Transports define where Speckle objects are stored and retrieved from. They provide a consistent interface for operations.send() and operations.receive().
from specklepy.transports.server import ServerTransport

transport = ServerTransport(stream_id="project_id", client=client)

ServerTransport

Sends and receives objects from a Speckle server. This is the primary transport for production use.

Constructor

ServerTransport(
    stream_id: str,
    client: Optional[SpeckleClient] = None,
    account: Optional[Account] = None,
    token: Optional[str] = None,
    url: Optional[str] = None,
    name: str = "RemoteTransport"
)
Parameters:
stream_id
str
required
Project ID
client
SpeckleClient
default:"None"
Authenticated client
account
Account
default:"None"
Account object
token
str
default:"None"
Token (use with url parameter)
url
str
default:"None"
Server URL (use with token parameter)
name
str
default:"\"RemoteTransport\""
Transport identifier
Provide one authentication method: client, account, or token + url.

Usage

from specklepy.api import operations
from specklepy.transports.server import ServerTransport

# Create transport
transport = ServerTransport(stream_id="project_id", client=client)

# Send
object_id = operations.send(my_object, transports=[transport])

# Receive
obj = operations.receive(object_id, remote_transport=transport)

Authentication Options

Using Client (Recommended):
transport = ServerTransport(stream_id="project_id", client=client)
Using Token:
transport = ServerTransport(
    stream_id="project_id",
    token="your_token",
    url="https://app.speckle.systems"
)
Using Account:
from specklepy.api.credentials import get_default_account

account = get_default_account()
transport = ServerTransport(stream_id="project_id", account=account)

MemoryTransport

Stores objects in memory. Useful for testing and temporary operations.
from specklepy.transports.memory import MemoryTransport

transport = MemoryTransport()
Properties:
  • objects (Dict[str, str]) - Dictionary of stored objects
  • saved_object_count (int) - Number of objects saved
Data is lost when the application exits. Not suitable for production.

SQLiteTransport

Stores objects in a local SQLite database for persistent local storage.
from specklepy.transports.sqlite import SQLiteTransport

transport = SQLiteTransport(
    app_name="MyApp",
    scope="ProjectData"
)
Parameters:
base_path
str
default:"None"
Custom directory for database
app_name
str
default:"\"Speckle\""
Application name
scope
str
default:"\"Objects\""
Database scope/purpose
max_batch_size_mb
float
default:"10.0"
Batch size in MB
Database location:
  • Windows: %APPDATA%\{app_name}\{scope}.db
  • macOS: ~/Library/Application Support/{app_name}/{scope}.db
  • Linux: ~/.config/{app_name}/{scope}.db
Use cases:
  • Local caching of server data
  • Offline workflows
  • Persistent local storage

Multiple Transports

Send to multiple locations simultaneously:
from specklepy.transports.server import ServerTransport
from specklepy.transports.sqlite import SQLiteTransport

server = ServerTransport(stream_id="project_id", client=client)
local = SQLiteTransport(app_name="MyApp")

# Send to both server and local cache
object_id = operations.send(my_object, transports=[server, local])

# Receive with local cache (checks local first)
obj = operations.receive(
    object_id,
    remote_transport=server,
    local_transport=local
)

Custom Transports

Create custom transports by extending AbstractTransport:
from specklepy.transports.abstract_transport import AbstractTransport

class CustomTransport(AbstractTransport):
    def save_object(self, id: str, serialized_object: str) -> None:
        # Implement storage logic
        pass

    def get_object(self, id: str) -> Optional[str]:
        # Implement retrieval logic
        pass

    # Implement other required methods...

Comparison

TransportPersistenceNetworkPrimary Use
ServerTransportServerRequiredProduction
MemoryTransportNoneNoTesting
SQLiteTransportLocal diskNoCaching, offline