Skip to main content

Shared wire types, schemas, and reactive primitives for PondSocket.

Project description

pondsocket-common

Shared wire types, schemas, and reactive primitives consumed by both pondsocket (server) and (eventually) pondsocket-client (Python client). Mirrors the role of @eleven-am/pondsocket-common in the JavaScript monorepo.

This package has one runtime dependency: pydantic v2.

Install

pip install pondsocket-common

In a workspace it's installed automatically via uv sync.

What's in it

Module Purpose
pondsocket_common.enums ServerActions, ClientActions, ChannelState, PresenceEventTypes, ErrorTypes, ChannelReceiver, SystemSender, Events, PubSubEvents — all StrEnum with exact wire strings
pondsocket_common.schemas Pydantic v2 models: ClientMessage, ServerMessage, PresenceMessage, ChannelEvent, plus parse_client_message / parse_server_message / parse_presence_message / parse_channel_event with comnon-style ValidationError
pondsocket_common.types UserData, IncomingConnection, PresencePayload, PubSubEvent variants, type aliases (PondMessage, PondPresence, PondAssigns, JoinParams)
pondsocket_common.headers Headers — case-insensitive view over ASGI-shape list[tuple[bytes, bytes]]
pondsocket_common.subjects Subject[T] and BehaviorSubject[T] — synchronous reactive primitives mirroring the JS comnon impl
pondsocket_common.errors PondError, status constants (400/401/403/404/409/429/500/503/504), constructor helpers (bad_request, unauthorized, …), MultiError
pondsocket_common.ids uuid() — dashed v4 string

Wire format

Outbound client → server (ClientMessage):

{
  "action": "BROADCAST",
  "event": "message",
  "channelName": "/chat/42",
  "requestId": "<uuid>",
  "payload": {"text": "hi"}
}

Server → client (ServerMessage | PresenceMessage) discriminated on action:

{ "action": "SYSTEM",  "event": "ACKNOWLEDGE", "channelName": "/chat/42", "requestId": "...", "payload": {} }
{ "action": "PRESENCE", "event": "JOIN",       "channelName": "/chat/42", "requestId": "...", "payload": {"presence": [...], "changed": {...}} }

Field names on the wire are camelCase. The Python models use snake_case attributes (request_id, channel_name) with pydantic aliases. Use model_dump(by_alias=True) to serialize to wire form.

Parity with @eleven-am/pondsocket-common

  • Enums have identical string values.
  • Subject/BehaviorSubject mirror the JS classes 1:1 (synchronous fan-out, size property, close() semantics, BehaviorSubject initial-value replay on subscribe).
  • ValidationError(message, path?) formats as "path: message" to match.
  • uuid() returns a dashed lowercase hex string (matches crypto.randomUUID()).

The pydantic models are the canonical schema definitions on the Python side; the JS package uses hand-rolled validators with the same field-name shape.

License

GPL-3.0-or-later.

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

pondsocket_common-0.0.5.tar.gz (12.1 kB view details)

Uploaded Source

Built Distribution

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

pondsocket_common-0.0.5-py3-none-any.whl (10.5 kB view details)

Uploaded Python 3

File details

Details for the file pondsocket_common-0.0.5.tar.gz.

File metadata

  • Download URL: pondsocket_common-0.0.5.tar.gz
  • Upload date:
  • Size: 12.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for pondsocket_common-0.0.5.tar.gz
Algorithm Hash digest
SHA256 9cb0e17dec373e6c24503b39b6997cfbbca92dfee157ac0ecac168551ab5bdbb
MD5 019555d9a3c966860f6e09f8278dca1d
BLAKE2b-256 7447a5a33983febe538c0dfbc1fab99008b7ed723d1d3dc9639dc162e89a42a5

See more details on using hashes here.

File details

Details for the file pondsocket_common-0.0.5-py3-none-any.whl.

File metadata

File hashes

Hashes for pondsocket_common-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 b7d0935247c168144eb51ff4196abfdd01f05bd37db26bcbd09ba660ec1ddeb3
MD5 f0dc1325fa81f3251bed874c9107b8e1
BLAKE2b-256 b2b76e5ac12ee9233e1a36877fd46b4dd65709c231b348c0c17c2643be31f53a

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