Skip to main content

High-performance Python bindings for a Rust-based Kafka client

Project description

Prosody: Python Bindings for Kafka

Prosody offers Python bindings to the Prosody Kafka client, providing features for message production and consumption, including configurable retry mechanisms, failure handling strategies, and integrated OpenTelemetry support for distributed tracing.

Features

  • Kafka Consumer: Per-key ordering with cross-key concurrency, offset management, consumer groups
  • Kafka Producer: Idempotent delivery with configurable retries
  • Timer System: Persistent scheduled execution backed by Cassandra or in-memory store
  • Quality of Service: Fair scheduling limits concurrency and prevents failures from starving fresh traffic. Pipeline mode adds deferred retry and monopolization detection
  • Distributed Tracing: OpenTelemetry integration for tracing message flow across services
  • Backpressure: Pauses partitions when handlers fall behind
  • Mocking: In-memory Kafka broker for tests (mock=True)
  • Failure Handling: Pipeline (retry forever), Low-Latency (dead letter), Best-Effort (log and skip)

Installation

Prosody supports Python 3.8 and above, including free-threaded builds (3.13t, 3.14t). Install from PyPI:

pip install prosody-events

Quick Start

from prosody import ProsodyClient, EventHandler, Context, Message
import datetime

# Initialize the client with Kafka bootstrap server, consumer group, and topics
client = ProsodyClient(
    # Bootstrap servers should normally be set using the PROSODY_BOOTSTRAP_SERVERS environment variable
    bootstrap_servers="localhost:9092",

    # To allow loopbacks, the source_system must be different from the group_id.
    # Normally, the source_system would be left unspecified, which would default to the group_id.
    source_system="my-application-source",

    # The group_id should be set to the name of your application
    group_id="my-application",

    # Topics the client should subscribe to
    subscribed_topics="my-topic"
)


# Define a custom message handler
class MyHandler(EventHandler):
    async def on_message(self, context: Context, message: Message) -> None:
        # Process the received message
        print(f"Received message: {message}")
        
        # Schedule a timer for delayed processing (requires Cassandra unless mock: True)
        if message.payload.get("schedule_followup"):
            future_time = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(seconds=30)
            await context.schedule(future_time)
    
    async def on_timer(self, context: Context, timer) -> None:
        # Handle timer firing
        print(f"Timer fired for key: {timer.key} at {timer.time}")


# Subscribe to messages using the custom handler
client.subscribe(MyHandler())

# Send a message to a topic
await client.send("my-topic", "message-key", {"content": "Hello, Kafka!"})

# Ensure proper shutdown when done
await client.unsubscribe()

Architecture

Prosody enables efficient, parallel processing of Kafka messages while maintaining order for messages with the same key:

  • Partition-Level Parallelism: Separate management of each Kafka partition
  • Key-Based Queuing: Ordered processing for each key within a partition
  • Concurrent Processing: Simultaneous processing of different keys
  • Backpressure Management: Pause consumption from backed-up partitions

Quality of Service

All modes use fair scheduling to limit concurrency and distribute execution time. Pipeline mode adds deferred retry and monopolization detection.

Fair Scheduling (All Modes)

The scheduler controls which message runs next and how many run concurrently.

Virtual Time (VT): Each key accumulates VT equal to its handler execution time. The scheduler picks the key with the lowest VT. A key that runs for 500ms accumulates 500ms of VT; a key that hasn't run recently has zero VT and gets priority.

Two-Class Split: Normal messages and failure retries have separate VT pools. The scheduler allocates execution time between them (default: 70% normal, 30% failure). During a failure spike, retries get at most 30% of execution time—fresh messages continue processing.

Starvation Prevention: Tasks receive a quadratic priority boost based on wait time. A task waiting 2 minutes (configurable) gets maximum boost, overriding VT disadvantage.

Deferred Retry (Pipeline Mode)

Moves failing keys to timer-based retry so the partition can continue processing other keys.

On transient failure: store the message offset in Cassandra, schedule a timer, return success. The partition advances. When the timer fires, reload the message from Kafka and retry.

# Configure defer behavior
client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    defer_enabled=True,           # Enable deferral (default: True)
    defer_base=1.0,               # Wait 1s before first retry
    defer_max_delay=86400.0,      # Cap at 24 hours
    defer_failure_threshold=0.9,  # Disable when >90% failing
)

Failure Rate Gating: When >90% of recent messages fail, deferral disables. The retry middleware blocks the partition, applying backpressure upstream.

Monopolization Detection (Pipeline Mode)

Rejects keys that consume too much execution time.

The middleware tracks per-key execution time in 5-minute rolling windows. Keys exceeding 90% of window time are rejected with a transient error, routing them through defer.

# Configure monopolization detection
client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    monopolization_enabled=True,     # Enable detection (default: True)
    monopolization_threshold=0.9,    # Reject keys using >90% of window
    monopolization_window=300.0,     # 5-minute window
)

Handler Timeout

Handlers are automatically cancelled if they exceed a deadline:

client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    timeout=30.0,             # Cancel after 30 seconds
    stall_threshold=60.0,     # Report unhealthy after 60 seconds
)

When a handler times out, context.should_cancel() returns True and await context.on_cancel() completes. The handler should exit promptly. If not specified, timeout defaults to 80% of stall_threshold.

Configuration

Configure via constructor options or environment variables. Options fall back to environment variables when unset.

Core

Option / Environment Variable Description Default
bootstrap_servers / PROSODY_BOOTSTRAP_SERVERS Kafka servers to connect to -
group_id / PROSODY_GROUP_ID Consumer group name -
subscribed_topics / PROSODY_SUBSCRIBED_TOPICS Topics to read from -
allowed_events / PROSODY_ALLOWED_EVENTS Only process events matching these prefixes (all)
source_system / PROSODY_SOURCE_SYSTEM Tag for outgoing messages (prevents reprocessing) <group_id>
mock / PROSODY_MOCK Use in-memory Kafka for testing False

Consumer

Option / Environment Variable Description Default
max_concurrency / PROSODY_MAX_CONCURRENCY Max messages being processed simultaneously 32
max_uncommitted / PROSODY_MAX_UNCOMMITTED Max queued messages before pausing consumption 64
timeout / PROSODY_TIMEOUT Cancel handler if it runs longer than this 80% of stall threshold
commit_interval / PROSODY_COMMIT_INTERVAL How often to save progress to Kafka 1s
poll_interval / PROSODY_POLL_INTERVAL How often to fetch new messages from Kafka 100ms
shutdown_timeout / PROSODY_SHUTDOWN_TIMEOUT Shutdown budget; handlers run freely until cancellation fires near the end of the timeout 30s
stall_threshold / PROSODY_STALL_THRESHOLD Report unhealthy if no progress for this long 5m
probe_port / PROSODY_PROBE_PORT HTTP port for health checks (None to disable) 8000
failure_topic / PROSODY_FAILURE_TOPIC Send unprocessable messages here (dead letter queue) -
idempotence_cache_size / PROSODY_IDEMPOTENCE_CACHE_SIZE Global shared cache capacity across all partitions. Set to 0 to disable the entire deduplication middleware (both in-memory and Cassandra tiers). 8192
idempotence_version / PROSODY_IDEMPOTENCE_VERSION Version string for cache-busting dedup hashes "1"
idempotence_ttl / PROSODY_IDEMPOTENCE_TTL TTL for dedup records in Cassandra 7d (604800 seconds)
slab_size / PROSODY_SLAB_SIZE Timer storage granularity (rarely needs changing) 1h
message_spans / PROSODY_MESSAGE_SPANS Span linking for message execution: child (child-of) or follows_from child
timer_spans / PROSODY_TIMER_SPANS Span linking for timer execution: child (child-of) or follows_from follows_from

Producer

Option / Environment Variable Description Default
send_timeout / PROSODY_SEND_TIMEOUT Give up sending after this long 1s

Retry

When a handler fails, retry with exponential backoff:

Option / Environment Variable Description Default
max_retries / PROSODY_MAX_RETRIES Give up after this many attempts 3
retry_base / PROSODY_RETRY_BASE Wait this long before first retry 20ms
max_retry_delay / PROSODY_RETRY_MAX_DELAY Never wait longer than this 5m

Deferral (Pipeline Mode)

Option / Environment Variable Description Default
defer_enabled / PROSODY_DEFER_ENABLED Enable deferral for new messages true
defer_base / PROSODY_DEFER_BASE Wait this long before first deferred retry 1s
defer_max_delay / PROSODY_DEFER_MAX_DELAY Never wait longer than this 24h
defer_failure_threshold / PROSODY_DEFER_FAILURE_THRESHOLD Disable deferral when failure rate exceeds this 0.9
defer_failure_window / PROSODY_DEFER_FAILURE_WINDOW Measure failure rate over this time window 5m
defer_cache_size / PROSODY_DEFER_CACHE_SIZE Track this many deferred keys in memory 1024
defer_store_cache_size / PROSODY_DEFER_STORE_CACHE_SIZE Maximum deferred store cache entries per Cassandra defer store 8192
defer_seek_timeout / PROSODY_DEFER_SEEK_TIMEOUT Timeout when loading deferred messages 30s
defer_discard_threshold / PROSODY_DEFER_DISCARD_THRESHOLD Read optimization (rarely needs changing) 100

Monopolization Detection (Pipeline Mode)

Option / Environment Variable Description Default
monopolization_enabled / PROSODY_MONOPOLIZATION_ENABLED Enable hot key protection true
monopolization_threshold / PROSODY_MONOPOLIZATION_THRESHOLD Max handler time as fraction of window 0.9
monopolization_window / PROSODY_MONOPOLIZATION_WINDOW Measurement window 5m
monopolization_cache_size / PROSODY_MONOPOLIZATION_CACHE_SIZE Max distinct keys to track 8192

Fair Scheduling (All Modes)

Option / Environment Variable Description Default
scheduler_failure_weight / PROSODY_SCHEDULER_FAILURE_WEIGHT Fraction of processing time reserved for retries 0.3
scheduler_max_wait / PROSODY_SCHEDULER_MAX_WAIT Messages waiting this long get maximum priority 2m
scheduler_wait_weight / PROSODY_SCHEDULER_WAIT_WEIGHT Priority boost for waiting messages (higher = more aggressive) 200.0
scheduler_cache_size / PROSODY_SCHEDULER_CACHE_SIZE Max distinct keys to track 8192

Telemetry Emitter

Prosody emits internal lifecycle events (message dispatched/succeeded/failed, timer scheduled/fired, producer sends) to a Kafka topic for observability:

Option / Environment Variable Description Default
telemetry_topic / PROSODY_TELEMETRY_TOPIC Kafka topic to produce telemetry events to prosody.telemetry-events
telemetry_enabled / PROSODY_TELEMETRY_ENABLED Enable or disable the telemetry emitter true

Cassandra

Persistent storage for timers and deferred retries (not needed if mock=True):

Option / Environment Variable Description Default
cassandra_nodes / PROSODY_CASSANDRA_NODES Servers to connect to (host:port) -
cassandra_keyspace / PROSODY_CASSANDRA_KEYSPACE Keyspace name prosody
cassandra_user / PROSODY_CASSANDRA_USER Username -
cassandra_password / PROSODY_CASSANDRA_PASSWORD Password -
cassandra_datacenter / PROSODY_CASSANDRA_DATACENTER Prefer this datacenter for queries -
cassandra_rack / PROSODY_CASSANDRA_RACK Prefer this rack for queries -
cassandra_retention / PROSODY_CASSANDRA_RETENTION Delete data older than this 1y

Liveness and Readiness Probes

Prosody includes a built-in probe server for consumer-based applications that provides health check endpoints. The probe server is tied to the consumer's lifecycle and offers two main endpoints:

  1. /readyz: A readiness probe that checks if any partitions are assigned to the consumer. Returns a success status only when the consumer has at least one partition assigned, indicating it's ready to process messages.

  2. /livez: A liveness probe that checks if any partitions have stalled (haven't processed a message within a configured time threshold).

Configure the probe server using either the client constructor:

client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    probe_port=8000,  # Set to None to disable
    stall_threshold=15.0  # Seconds before considering a partition stalled
)

Or via environment variables:

PROSODY_PROBE_PORT=8000  # Set to 'none' to disable
PROSODY_STALL_THRESHOLD=15s  # Default stall detection threshold

Important Notes

  1. The probe server starts automatically when the consumer is subscribed and stops when unsubscribed.
  2. A partition is considered "stalled" if it hasn't processed a message within the stall_threshold duration.
  3. The stall threshold should be set based on your application's message processing latency and expected message frequency.
  4. Setting the threshold too low might cause false positives, while setting it too high could delay detection of actual issues.
  5. The probe server is only active when consuming messages (not for producer-only usage).

Advanced Usage

Pipeline Mode

Pipeline mode is the default mode. Ensures ordered processing, retrying failed operations indefinitely:

# Initialize client in pipeline mode
client = ProsodyClient(
    mode="pipeline",  # Explicitly set pipeline mode (this is the default)
    group_id="my-consumer-group",
    subscribed_topics="my-topic"
)

Low-Latency Mode

Prioritizes quick processing, sending persistently failing messages to a failure topic:

# Initialize client in low-latency mode
client = ProsodyClient(
    mode="low-latency",  # Set low-latency mode
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    failure_topic="failed-messages"  # Specify a topic for failed messages
)

Best-Effort Mode

Optimized for development environments or services where message processing failures are acceptable:

# Initialize client in best-effort mode
client = ProsodyClient(
    mode="best-effort",  # Set best-effort mode
    group_id="my-consumer-group",
    subscribed_topics="my-topic"
)

Event Type Filtering

Prosody supports filtering messages based on event type prefixes, allowing your consumer to process only specific types of events:

# Process only events with types starting with "user." or "account."
client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    allowed_events=["user.", "account."]
)

Or via environment variables:

PROSODY_ALLOWED_EVENTS=user.,account.

Matching Behavior

Prefixes must match exactly from the start of the event type:

✓ Matches:

  • {"type": "user.created"} matches prefix user.
  • {"type": "account.deleted"} matches prefix account.

✗ No Match:

  • {"type": "admin.user.created"} doesn't match user.
  • {"type": "my.account.deleted"} doesn't match account.
  • {"type": "notification"} doesn't match any prefix

If no prefixes are configured, all messages are processed. Messages without a type field are always processed.

Source System Deduplication

Prosody prevents processing loops in distributed systems by tracking the source of each message:

# Consumer and producer in one application
client = ProsodyClient(
    group_id="my-service",
    source_system="my-service-producer",  # Must differ from groupId to allow loopbacks; defaults to groupId
    subscribed_topics="my-topic"
)

Or via environment variable:

PROSODY_SOURCE_SYSTEM=my-service-producer

How It Works

  1. Producers add a source-system header to all outgoing messages.
  2. Consumers check this header on incoming messages.
  3. If a message's source system matches the consumer's group ID, the message is skipped.

This prevents endless loops where a service consumes its own produced messages.

Message Deduplication

Prosody automatically deduplicates messages using the id field in their JSON payload. Messages with the same ID and key are processed only once.

Deduplication uses a two-tier architecture:

  • Global in-memory cache: A single LRU cache shared across all partitions in the process. Because it is shared, it survives partition reassignments within the same process, reducing duplicate work during rebalances.
  • Cassandra-backed persistent store: Deduplication records written to Cassandra survive process restarts and cross-instance rebalances, providing durable protection against duplicates.
# Messages with IDs are deduplicated per key
await client.send("my-topic", "key1", {
    "id": "msg-123",  # Message will be processed
    "content": "Hello!"
})

await client.send("my-topic", "key1", {
    "id": "msg-123",  # Message will be skipped (duplicate)
    "content": "Hello again!"
})

await client.send("my-topic", "key2", {
    "id": "msg-123",  # Message will be processed (different key)
    "content": "Hello!"
})

The entire deduplication middleware (both the in-memory cache and the Cassandra-backed persistent store) can be disabled by setting idempotence_cache_size=0:

client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    idempotence_cache_size=0  # Disable deduplication entirely
)

Or via environment variable:

PROSODY_IDEMPOTENCE_CACHE_SIZE=0

To invalidate all previously recorded deduplication entries (e.g. after a data migration), change idempotence_version:

client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    idempotence_version="2"  # All entries recorded under version "1" are ignored
)

The idempotence_ttl option controls how long deduplication records are retained in Cassandra (default: 7 days). Set this to match your expected message redelivery window:

from datetime import timedelta

client = ProsodyClient(
    group_id="my-consumer-group",
    subscribed_topics="my-topic",
    idempotence_ttl=timedelta(days=7)  # also accepts seconds as a float (e.g. 604800.0)
)

Timer Functionality

Prosody supports timer-based delayed execution within message handlers. When a timer fires, your handler's on_timer method will be called:

import datetime
from prosody import EventHandler, Context, Message

class MyHandler(EventHandler):
    async def on_message(self, context: Context, message: Message) -> None:
        # Schedule a timer to fire in 30 seconds
        future_time = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(seconds=30)
        await context.schedule(future_time)
        
        # Schedule multiple timers
        one_minute = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=1)
        two_minutes = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(minutes=2)
        await context.schedule(one_minute)
        await context.schedule(two_minutes)
        
        # Check what's scheduled
        scheduled_times = await context.scheduled()
        print(f"Scheduled timers: {len(scheduled_times)}")
    
    async def on_timer(self, context: Context, timer) -> None:
        print("Timer fired!")
        print(f"Key: {timer.key}")
        print(f"Scheduled time: {timer.time}")

Timer Methods

The context provides timer scheduling methods that allow you to delay execution or implement timeout behavior:

  • schedule(time): Schedules a timer to fire at the specified time
  • clear_and_schedule(time): Clears all timers and schedules a new one
  • unschedule(time): Removes a timer scheduled for the specified time
  • clear_scheduled(): Removes all scheduled timers
  • scheduled(): Returns a list of all scheduled timer times

Timer Object

When a timer fires, the on_timer method receives a timer object with these properties:

  • key (str): The entity key identifying what this timer belongs to
  • time (datetime): The time when this timer was scheduled to fire

Note: Timer precision is limited to seconds due to the underlying storage format. Sub-second precision in scheduled times will be rounded to the nearest second.

Timer Configuration

Timer functionality requires Cassandra for persistence unless running in mock mode. Configure Cassandra connection via environment variable:

PROSODY_CASSANDRA_NODES=localhost:9042  # Required for timer persistence

Or programmatically when creating the client:

client = ProsodyClient(
    bootstrap_servers="localhost:9092",
    group_id="my-application",
    subscribed_topics="my-topic",
    cassandra_nodes="localhost:9042"  # Required unless mock=True
)

For testing, you can use mock mode to avoid Cassandra dependency:

# Mock mode for testing (timers work but aren't persisted)
client = ProsodyClient(
    bootstrap_servers="localhost:9092",
    group_id="my-application",
    subscribed_topics="my-topic",
    mock=True  # No Cassandra required in mock mode
)

OpenTelemetry Tracing

Prosody supports OpenTelemetry tracing, allowing you to monitor and analyze the performance of your Kafka-based applications. The library will emit traces using the OTLP protocol if the OTEL_EXPORTER_OTLP_ENDPOINT environment variable is defined.

Note: Prosody emits its own traces separately because it uses its own tracing runtime, as it would be expensive to send all traces to Python.

Required Packages

To use OpenTelemetry tracing with Prosody, you need to install the following packages:

opentelemetry-sdk>=1.26.0
opentelemetry-api>=1.26.0
opentelemetry-exporter-otlp-proto-grpc>=1.26.0

Initializing Tracing

To initialize tracing in your application:

from opentelemetry import trace
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor

traceProvider = TracerProvider()
processor = BatchSpanProcessor(OTLPSpanExporter())
traceProvider.add_span_processor(processor)
trace.set_tracer_provider(traceProvider)

# Creates a tracer from the global tracer provider
tracer = trace.get_tracer(__name__)

Setting OpenTelemetry Environment Variables

Set the following standard OpenTelemetry environment variables:

OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
OTEL_SERVICE_NAME=my-service-name

For more information on these and other OpenTelemetry environment variables, refer to the OpenTelemetry specification.

Using Tracing in Your Application

After initializing tracing, you can define spans in your application, and they will be properly propagated through Kafka:

class MyHandler(EventHandler):
    async def on_message(self, context: Context, message: Message) -> None:
        with tracer.start_as_current_span("test-receive"):
            # Process the received message
            print(f"Received message: {message}")

Span Linking

By default, message execution spans use child (child-of relationship — the execution span is part of the same trace as the producer). Timer execution spans use follows_from (the execution span starts a new trace with a span link back to the scheduling span, since timer execution is causally related but not part of the same operation).

Both strategies are configurable via the message_spans / PROSODY_MESSAGE_SPANS and timer_spans / PROSODY_TIMER_SPANS options. Accepted values: child, follows_from.

Best Practices

🔥 ☢️ DANGER: NEVER SHARE EVENTHANDLER STATE ACROSS CALLS ☢️ 🔥

Your event handler class methods will be called concurrently. NEVER use mutable shared state across event handler calls, like setting instance variables. Sharing state can introduce subtle data races and corruption that may only appear in production. If you absolutely must use non-local mutable state, ensure that you know what you're doing and use appropriate synchronization primitives.

Ensuring Idempotent Message Handlers

Idempotent message handlers are crucial for maintaining data consistency, fault tolerance, and scalability when working with distributed, event-based systems. They ensure that processing a message multiple times has the same effect as processing it once, which is essential for recovering from failures.

Strategies for achieving idempotence:

  1. Natural Idempotence: Use inherently idempotent operations (e.g., setting a value in a key-value store).

  2. Deduplication with Unique Identifiers:

  • Kafka messages can be uniquely identified by their partition and offset.
  • Before processing, check if the message has been handled before.
  • Store processed message identifiers with an appropriate TTL.
  1. Database Upserts: Use upsert operations for database writes (e.g., INSERT ... ON CONFLICT DO UPDATE in PostgreSQL).

  2. Partition Offset Tracking:

  • Store the latest processed offset for each partition.
  • Only process messages with higher offsets than the last processed one.
  • Critically, store these offsets transactionally with other state updates to ensure consistency.
  1. Idempotency Keys for External APIs: Utilize idempotency keys when supported by external APIs.

  2. Check-then-Act Pattern:

  • For non-idempotent external systems, verify if an operation was previously completed before execution.
  • Maintain a record of completed operations, keyed by a unique message identifier.
  1. Saga Pattern:
  • Implement a state machine in your database for multi-step operations.
  • Each message advances the state machine, allowing for idempotent processing and easy failure recovery.
  • Particularly useful for complex, distributed transactions across multiple services.

Proper Shutdown

Always unsubscribe from topics before exiting your application:

# Ensure proper shutdown
await client.unsubscribe()

This ensures:

  1. Completion and commitment of all in-flight work
  2. Quick rebalancing, allowing other consumers to take over partitions
  3. Proper release of resources

Implement shutdown handling in your application using an asyncio event:

import asyncio
import signal
from prosody import ProsodyClient


async def main():
    # Create an event to signal when to shut down
    shutdown_event = asyncio.Event()

    # Set up signal handlers
    for sig in (signal.SIGTERM, signal.SIGINT, signal.SIGHUP):
        asyncio.get_running_loop().add_signal_handler(
            sig, lambda s=sig: asyncio.create_task(shutdown(shutdown_event, s))
        )

    client = ProsodyClient(
        bootstrap_servers="localhost:9092",
        group_id="my-consumer-group",
        subscribed_topics="my-topic"
    )

    # Subscribe to messages using your custom handler
    client.subscribe(MyHandler())

    # Wait for the shutdown event
    await shutdown_event.wait()

    # Unsubscribe
    await client.unsubscribe()


async def shutdown(event: asyncio.Event, signal: signal.Signals):
    print(f"Received signal {signal.name}. Initiating shutdown...")
    event.set()


if __name__ == '__main__':
    asyncio.run(main())

Error Handling

Prosody classifies errors as transient (temporary, can be retried) or permanent (won't be resolved by retrying). By default, all errors are considered transient.

Use the @permanent decorator to classify exceptions that should not be retried:

from prosody import EventHandler, Context, Message, permanent


class MyHandler(EventHandler):
    @permanent(TypeError, AttributeError)
    async def on_message(self, context: Context, message: Message):
        # Your message handling logic here
        # TypeError and AttributeError will be treated as permanent
        # All other exceptions will be treated as transient (default behavior)
        pass

Best practices:

  • Use permanent errors for issues like malformed data or business logic violations.
  • Use transient errors for temporary issues like network problems.
  • Be cautious with permanent errors as they prevent retries and can result in data loss.
  • Consider system reliability and data consistency when classifying errors.

Handling Task Cancellation

Prosody cancels tasks during partition rebalancing, timeout, or shutdown. During shutdown, handlers run freely for most of the shutdown_timeout before the cancellation signal fires — giving in-flight work time to complete. How you handle cancellation is critical:

  • Prosody interprets task success based on exception propagation.
  • A task that exits without an exception is considered successful.
  • Any exception signals task failure.

Best practices:

  1. Exit promptly when cancelled to avoid rebalancing delays.
  2. Use try/finally or context managers for clean resource handling.

Failing to follow these practices can lead to slower message processing due to delayed rebalancing.

Release Process

Prosody uses an automated release process managed by GitHub Actions. Here's an overview of how releases are handled:

  1. Trigger: The release process is triggered automatically on pushes to the main branch.

  2. Release Please: The process starts with the "Release Please" action, which:

    • Analyzes commit messages since the last release.
    • Creates or updates a release pull request with changelog updates and version bumps.
    • When the PR is merged, it creates a GitHub release and a git tag.
  3. Build Process: If a new release is created, the following build jobs are triggered:

    • Linux builds for x86_64 and aarch64 architectures.
    • MuslLinux builds for the same architectures.
    • Windows build for x64 architecture.
    • macOS build for aarch64 architecture.
    • Source distribution (sdist) build.
  4. Artifact Upload: Each build job uploads its artifacts (wheels or sdist) to GitHub Actions.

  5. Publication: If all builds are successful, the final step publishes the built artifacts to PyPI.

Contributing to Releases

To contribute to a release:

  1. Make your changes in a feature branch.
  2. Use Conventional Commits syntax for your commit messages. This helps Release Please determine the next version number and generate the changelog.
  3. Create a pull request to merge your changes into the main branch.
  4. Once your PR is approved and merged, Release Please will include your changes in the next release PR.

Manual Releases

While the process is automated, manual intervention may sometimes be necessary:

  • You can manually trigger the release workflow from the GitHub Actions tab if needed.
  • If you need to make changes to the release PR created by Release Please, you can do so before merging it.

Remember, all releases are automatically published to PyPI. Ensure you have thoroughly tested your changes before merging to main.

Administrative Operations

⚠️ Important Note: Topic management in production environments should typically be handled through GitOps using Strimzi KafkaTopic manifests. The AdminClient is provided for testing scenarios and specific cases where the data team requires manual topic creation and deletion.

AdminClient

The AdminClient provides administrative operations for Kafka topics:

from prosody import AdminClient

# Initialize admin client
admin = AdminClient(bootstrap_servers="localhost:9092")

# Create a topic for testing
await admin.create_topic(
    "test-topic",
    partition_count=4,
    replication_factor=1,
    cleanup_policy="delete",
    retention=datetime.timedelta(days=7)  # or retention=604800.0 (seconds)
)

# Delete a topic
await admin.delete_topic("test-topic")

Configuration Parameters

The AdminClient constructor accepts:

  • bootstrap_servers (str | list[str]): Kafka bootstrap servers (required)

Or via environment variable:

PROSODY_BOOTSTRAP_SERVERS=localhost:9092  # Single server
PROSODY_BOOTSTRAP_SERVERS=localhost:9092,localhost:9093  # Multiple servers

Topic Configuration Options

When creating topics, the following options are supported:

  • partition_count (int): Number of partitions (optional, uses broker default)
  • replication_factor (int): Replication factor (optional, uses broker default)
  • cleanup_policy (str): Cleanup policy such as "delete" or "compact" (optional)
  • retention (timedelta | float): Message retention time as timedelta object or seconds as float (optional)

These can also be configured via environment variables:

PROSODY_TOPIC_PARTITIONS=4                    # Number of partitions
PROSODY_TOPIC_REPLICATION_FACTOR=1           # Replication factor
PROSODY_TOPIC_CLEANUP_POLICY=delete          # Cleanup policy
PROSODY_TOPIC_RETENTION=7d                   # Retention as humantime string (7d, 2h 30m, etc.)

API Reference

ProsodyClient

  • __init__(**config): Initialize a new ProsodyClient with the given configuration.
  • send(topic: str, key: str, payload: Any) -> None: Send a message to a specified topic.
  • consumer_state() -> str: Get the current state of the consumer.
  • subscribe(handler: EventHandler) -> None: Subscribe to messages using the provided handler.
  • unsubscribe() -> None: Unsubscribe from messages and shut down the consumer.

AdminClient

  • __init__(**config): Initialize a new AdminClient with the given configuration.
  • create_topic(name: str, **config) -> None: Create a Kafka topic with optional configuration parameters.
  • delete_topic(name: str) -> None: Delete an existing Kafka topic.

EventHandler

An abstract base class for user-defined handlers:

class EventHandler(ABC):
    @abstractmethod
    async def on_message(self, context: Context, message: Message) -> None:
        # Implement your message handling logic here
        pass
    
    @abstractmethod
    async def on_timer(self, context: Context, timer: Timer) -> None:
        # Implement your timer handling logic here
        pass

Note: The on_message method may be called from different threads. Ensure that any handler state is thread-safe. If library incompatibility becomes an issue, this may be changed in the future so all handler calls originate from the same thread,

Message

Represents a Kafka message as a frozen dataclass with the following attributes:

  • topic: str: The name of the topic.
  • partition: int: The partition number.
  • offset: int: The message offset within the partition.
  • timestamp: datetime: The timestamp when the message was created or sent.
  • key: str: The message key.
  • payload: JSONValue: The message payload as a JSON-serializable value.

Context

Represents the context of a Kafka message, providing timer scheduling methods:

  • schedule(time: datetime) -> None: Schedules a timer to fire at the specified time
  • clear_and_schedule(time: datetime) -> None: Clears all timers and schedules a new one
  • unschedule(time: datetime) -> None: Removes a timer scheduled for the specified time
  • clear_scheduled() -> None: Removes all scheduled timers
  • scheduled() -> List[datetime]: Returns a list of all scheduled timer times
  • should_cancel() -> bool: Check if cancellation has been requested (includes timeout and shutdown)
  • on_cancel() -> Coroutine: Awaitable that completes when cancellation is signaled

Timer

Represents a timer that has fired, provided to the on_timer method:

  • key: str: The entity key identifying what this timer belongs to
  • time: datetime: The time when this timer was scheduled to fire

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

prosody_events-0.2.0.tar.gz (91.9 kB view details)

Uploaded Source

Built Distributions

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

prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded PyPymusllinux: musl 1.2+ ARM64

prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded PyPymanylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.15manylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp314-cp314t-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp314-cp314-win_amd64.whl (7.3 MB view details)

Uploaded CPython 3.14Windows x86-64

prosody_events-0.2.0-cp314-cp314-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp314-cp314-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp314-cp314-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp314-cp314-macosx_11_0_arm64.whl (6.5 MB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp313-cp313t-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp313-cp313-win_amd64.whl (7.3 MB view details)

Uploaded CPython 3.13Windows x86-64

prosody_events-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp313-cp313-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp313-cp313-macosx_11_0_arm64.whl (6.5 MB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

prosody_events-0.2.0-cp312-cp312-win_amd64.whl (7.3 MB view details)

Uploaded CPython 3.12Windows x86-64

prosody_events-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp312-cp312-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp312-cp312-macosx_11_0_arm64.whl (6.5 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

prosody_events-0.2.0-cp311-cp311-win_amd64.whl (7.3 MB view details)

Uploaded CPython 3.11Windows x86-64

prosody_events-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp311-cp311-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp311-cp311-macosx_11_0_arm64.whl (6.5 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

prosody_events-0.2.0-cp310-cp310-win_amd64.whl (7.3 MB view details)

Uploaded CPython 3.10Windows x86-64

prosody_events-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp310-cp310-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.9musllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp39-cp39-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.24+ ARM64

prosody_events-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (7.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

prosody_events-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl (7.5 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ x86-64

prosody_events-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl (7.3 MB view details)

Uploaded CPython 3.8musllinux: musl 1.2+ ARM64

prosody_events-0.2.0-cp38-cp38-manylinux_2_24_aarch64.whl (7.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.24+ ARM64

File details

Details for the file prosody_events-0.2.0.tar.gz.

File metadata

  • Download URL: prosody_events-0.2.0.tar.gz
  • Upload date:
  • Size: 91.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c02a09a9dd45d95fc04530e7aa28070389d1ef2d82e2f0a012f0dc0c46c62d50
MD5 ff5ab26e3c1dbe54f0e0d5f5bc5d41df
BLAKE2b-256 3715abe4f83359f5cad7e31b27d4a2b65d294c89b8577a6d382aef67da323164

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: PyPy, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4c0d4ec7802475883256028105881a19cc858ca537f9d692d618b4d8972db3c6
MD5 c70e4ad9e25f1f153ea8ed83381f976c
BLAKE2b-256 9dfbd691ba2edb4d02d1d410b5420da9e3f07ea2ddcac14376251d426b6bf933

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: PyPy, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 84bfe3aef305986c9e3720f8022b822a0a21759b016e7059aadfb3be702d5212
MD5 9e8ed090e32c252276e3262fd1649f1d
BLAKE2b-256 1376b42cbe3c093e8ac53a33d9ec0b0bc2e58fb174e8582ab405804c80dc9ec8

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: PyPy, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 1a7171324668bd43741f643b04d45a99875702bbbf07c4b0a83f43b05b23dd02
MD5 d6cd561e475bb8419df885b996e9d452
BLAKE2b-256 dd5803b84b92bddeef469d8a882204141cc5c80773e53b9d0955afc158f65824

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: PyPy, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f88e1dabd8871137fe338c925f5d73b2fa2ca0e74d998d3104d20d41d1486639
MD5 9e13119a355311c3424694eace2ef7eb
BLAKE2b-256 a92e8903e7daa5f3041ce044691620eef8f052c781f2049732f3a697673f3c2f

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.15, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 71d33489f8fda4e2ea8200d5a9af69d5047fe64be4dfb8aa19507ebacc261d9f
MD5 51741b9c55a7a46b1a7e0762f4f1648b
BLAKE2b-256 86c14b510b11a898d27f56ece5e735146f1b0c5358001ba6450cdf46f7b7b62a

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a41580a679dfcc3850ebad74469e9c491b58635d0110b8b115198e92ed1bf514
MD5 d234535c1f2874b2e7e7912b8f210142
BLAKE2b-256 c9837a0af67dead954d1ef5f08ce19a96e82c35e8b1f6962fefc1ef33f3d8146

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.14t, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 567f478e45350c285c5da55f71ae1bf49bfeb8909f09ed028c96fb0688105e2d
MD5 99af2196da42960f480eebb13c3a2223
BLAKE2b-256 c69ae2bccfc9fc97a99c17e1d3dc8fd6ccab6da2c246a2118cfdd1376fc8a13e

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314t-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314t-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.14t, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314t-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 52f02953e2784106a4a3977bb112086ecb7a7fdd51078664760422f64c9a432e
MD5 08462832b72004d914eaf40e2078946f
BLAKE2b-256 6c2a1e2292b910094978753fb9a41fd0f4fe84849e0b8e793d5c0983e6efca09

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 6aa33f23c5bcaf7c6ec46a6de4c0b3045f335596c3a637e8e5fa1bcfea7afcbe
MD5 1198940c9667ffb0d4f223539d3c031b
BLAKE2b-256 433d5d972e2fb0d294e9c23f00e36403b48e49ccd824a476a1502ba913ddcbb6

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.14, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ba56dade75062129755073c91b723fc60148fa641d42d2dfb12608b5345d6de8
MD5 6ba428cbfda37a78b05310f63ea407ae
BLAKE2b-256 1b46c8825caa0dabc9c8a48087e98885f458a41d0768de37b034840395a9b0ae

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.14, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 0e6e68d92c43d66124189874034fc6477b693e7f609223e1a569bfa00fb6fd27
MD5 f3b649c7d5f0bdfdc83a8e8d3195b89e
BLAKE2b-256 2672fe502070418aef0d80f4c3a4496ede001572e0c70e5c70e197b4e9c0a9f8

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.14, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 a97e5e4ab44c140d5fb2e5f3f7e83ecdc4d8f99fdb75b5aa74b07fc7a9c572e1
MD5 d1ef897ffa7f3d36c217be5b2977c4e9
BLAKE2b-256 96a3e8219e70ce0777b6c23bfdb66679dfee6cd24b24d775f9264281f03b8c89

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.14, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e6be8b8f5920173a5888a6bb797d0c0ffe3ca518954305fa9b571214fbc58a07
MD5 e7d7aab0b7b4b28f0221d5b906f53533
BLAKE2b-256 66e5f2c1924d997facb2be7d09ee405ee249ce820a800377ab67a667f4d88ee4

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 6.5 MB
  • Tags: CPython 3.14, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03c21bef0e6df3ce69bd060b02a6e3ad59998e237555cc004e648ebb3c3314fe
MD5 51b18e7e38abdf8a8cbdc95437351a1a
BLAKE2b-256 6c983250b06a21e541d787d8d72546b809647b6b64f2e792cc24743aff9437ac

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.13t, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5144b9993a189ea6fbc10bb398064c6ad355be4d83cc9e23f7311d31b2d7285f
MD5 6efad70804cc260549fcb04518ff6fad
BLAKE2b-256 3ce4e6d7a2c113dae8076b955f4c39c2301c03ac16d9c9037e89f4922f746835

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.13t, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 4b850ea2433456c4a51299121ae89dc0c21531d600e4e2b56cb7caa5756d493c
MD5 b7d2c9edd2618d96639bb97af76e268d
BLAKE2b-256 313669009633766a0a23e5b60bd430962cc6040df4bb72cef3dc2bbde251b8f2

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313t-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313t-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.13t, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313t-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 37620e4a484619d9c5f90b791275baee5135534842caa11517e4921a762e07a2
MD5 c96a24748191fc8c4504f9dc4c92150d
BLAKE2b-256 0d3c762ca191e9d31bd7d8be2567c6a5d6823a3c1a8d1f83b2a0b1493ae2349c

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 81c3c600dc77be17dc50c0535cd45b703e47d97d628ce1662737963ef3c6ca6c
MD5 f59e5eb882bb943b9c96a8f0e5f657d8
BLAKE2b-256 e989bf2eee5f2c860acb803ccdeae05e50d0db854829fa61c84da17fa0b5986c

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.13, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 7106a15581457772fca982d6d7a7a53f898e63da552ae37b787b7f7f98dafa5f
MD5 d6152efb932830e7c4345aa583ed1c1f
BLAKE2b-256 d3fc59b98ce4aafbed1e7f29ec4ddda3ff0f9ef25b3e2e11c4410eb419c72d8b

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.13, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 f9e831fdeefa5015dcd0cdcadecb87888cc4d901e402502d455907fa0a5fb053
MD5 7c0321bc1785078597c75feef1c3b8bd
BLAKE2b-256 e00ccbe4d366dffa243d3f92c8a0427df42ac9ab5aa930e76373aa7254c37ea2

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.13, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 43e2b5bb71a29e3a60056fcf068b61d4f10c1953060c9915427f5dbb39ce7fb8
MD5 15bf2648afbae119e45af91367105a42
BLAKE2b-256 72f56ae404e7044ab9b143d130b904a26ed569222b4a8e6b6d7aaa8cbce65d83

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 fa4b1134dd73f0e3665117ee663bba5087847a4a95fe7a714dd8bc220bbb27c6
MD5 94067b8b9680287562c701207d007e74
BLAKE2b-256 b2fa53d06715a00406f477833567b7cb9844a9b1863d8b284b7ec2d82aa6eb05

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 6.5 MB
  • Tags: CPython 3.13, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8af0189f0257e3054adc6eeaf2ea95e9c59af86b2488b70491208b734e9d9920
MD5 6741ba95cc8093840193d99d83053044
BLAKE2b-256 1d645ead3c713ba6a9b223c6f18d923a876f7c417c9d6b166e98352f286f40ed

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 db1517fe3b0864736cc7a376008bdbc914df38e9293f244e0ff16abd91281d93
MD5 0339af532121e1b435cfe4d18836a2d1
BLAKE2b-256 cd7039ef7f15d23ffe4cc2f168114c810e2062f3f94c49e3a158a5f58450a0ad

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.12, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 c4fd2ccb3d667d9898b16e2e211c31a8bcd02259ef1c9ee06e29f3998e90ac11
MD5 9e67cffe60e1bb05d65df5e1745e6e94
BLAKE2b-256 fc527c6e58aa99ad7a16bd7658009c71b36726a980d84e2a4e9f723c7807bf94

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.12, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 162e0794a6956c1d588a38679d9638c7a701aa6979920a558f9f73b365062456
MD5 0fd61363b61602e8d99e3317665dcccb
BLAKE2b-256 f05bcfe748a98643a7a7516517a6983b2ab5caff7c356c9a490275c28ac56885

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp312-cp312-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp312-cp312-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.12, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp312-cp312-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 98ebd7f9261793a4a462623de0529614c21a8dffc5a8240c64a7eae5c88e8841
MD5 dfbdcbc39cf4e0eee41f7b484951b1fb
BLAKE2b-256 ad0e01e3f54b749b18abc344813a5f77c96c63a4387ea838d73c99daedc5ae33

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9987230ed95e03dedef2d692aa591febfa1a008edd73e92cf9986379ac144ef6
MD5 13ec600a454db1e9fad2c3fa1d5d21a2
BLAKE2b-256 e809f27ba0b2ecbd62fcf5294306fd8f71461910b8640af0fb6ef23ed331ee10

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 6.5 MB
  • Tags: CPython 3.12, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a834bf9e8e40da26fa0b7d81d6e4bb8ad082e8fe5f74134193dd6dc7a342b481
MD5 1fa7aac555ab49363397622a3b9603e9
BLAKE2b-256 c0a1aedf5dddb98aed3f21c1a1fbbae9bf0d33822129db434179838c032b98b0

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 5b02e203d85b83c963251d7ae0fa43b5afab9ffc5105ba7e2873325c433cd5e2
MD5 a337f220c08bfbea3ebd1eaf70c6922e
BLAKE2b-256 a75d7759b78f7c6660fdba7f49bc51d66d4b1113a69edb1b836a28ae21b725b5

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.11, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4c257b0defe0478fcab0d31a1a81ab2c4803d6c000ce12cf11fcac013be14f2b
MD5 a6e619dbba9695d765c3991b4c4fb3bc
BLAKE2b-256 e0e52d7fa98cf9464877db2e7b6a57da394b10221724afce3fcc4b5466f151e8

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.11, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 3903aeaa9187a70f4ce41b47150c4b74d2a00f01ae7f53c77c56b7ebc93141ee
MD5 3e2884b8b975ad9dac6fda54136627f0
BLAKE2b-256 fef26dd896971f577b229d39a7b8f4e4ff2a4b3ac019aabbf07f2ad3fa64dd21

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp311-cp311-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp311-cp311-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.11, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp311-cp311-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 34f7aad5d1fa51fa6ea435a720ecbf2d0eed7a7bea9d47056058710d406155b4
MD5 007ed296fedb439b54b6234373ae6a06
BLAKE2b-256 93a3ef9ec55b74016e32ffc58a048d5a06370b7bbf9bdf280c12c591f8e3203b

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9b9c5805ab8eae2dd7c4f14ce9b404a56bb602b4b670e88361c915fe13b4e56d
MD5 be53e13948df969e76b2bd673f5762f3
BLAKE2b-256 1863a20ce3f9dd0c78e52cafd4a4d867f8877cfe6381c24530ff3a8758f93e1b

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 6.5 MB
  • Tags: CPython 3.11, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 49432e875082075e11b6e88a3b9a2ab804c3cd38c2c3e076925d8ceb54ebd47d
MD5 0ac0f54f6eca8d5c01c640802ff95b0e
BLAKE2b-256 0a8e37edd0d82b1f2080071f63b7030ea3a84d10e13810babe69f5d94f5938c9

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 acd24ce791345ebf33966b4216aca9471669ea298bc7506125795ef28822a037
MD5 e5f8616965411c65a66b0b2218cacc4b
BLAKE2b-256 0c8888d9c8a2aae7c2b6b6b84bc488b696afbc5e29e4b87b701bbb28d42ba08f

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.10, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 91e37637535e2d2a812a8757653d04f8a1db4f4ca1fd494e74c79c218d419ace
MD5 cd3a282b7ea1a4a2dbcb7ce5295fd779
BLAKE2b-256 2a61526c4fd8b2bb5572457363ded329a33145630dc4c993182a8c4956127c00

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.10, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 62a2ec3d2c0bd444f6c1a7721cc9aef83de27fbf7a24f1a3d30c45eba622aa72
MD5 1cf22dd5eefc6fdf782931b04f0deca7
BLAKE2b-256 85820d3148edb33064a1afcaeccb9de31b2d028955d087df8ea09ef7f4d7ac61

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp310-cp310-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp310-cp310-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.10, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp310-cp310-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 1efc73226e66f1da1b0417ad664bd78d6304333d54f0286bbc0bd71c16248f35
MD5 73363b4d0495bcfadf95a42b1003699c
BLAKE2b-256 21b2808d9c4106805c06d16b08d8466e4ea97d920882de9586fbd11cd1297cd6

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0c16c3651f1fb97d23698eab8b2e3d931e8b9bd523e5de1ec14b139061eaf04
MD5 05bebdbdfe1967a07a48c07dc95bd110
BLAKE2b-256 373b691c0b51e18b6477df6e776c0c5c25c3156558063edd151742d5efaace0d

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.9, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 86df486c9c195ca7f5f5c67043b1e551f60c64e6fbf5e5d1e8d31d1e9b14d0ce
MD5 f45f6fc9865aab6f4d7c06c9f8769ab2
BLAKE2b-256 967430cfed7a35336f0d033a0575f81c5565ebef1d3403f090c5944651ae176d

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.9, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1630c3ed208d43a5a6c286eccbe7374e8ab6157f46550f7fb77f65c282dbea1b
MD5 237f7c4975a81b932cd7ec7b7b27cb85
BLAKE2b-256 eec129f9d0b87e7d590819a796979ebad7a2061a943aa8b8125ba5218cd6fca1

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp39-cp39-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp39-cp39-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.9, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp39-cp39-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 7f167c9707b58005d028bd3e29f5e6db9e84058200900455f974d90db0fcf69c
MD5 e33377a18becac8ec97ac3a3a8d58a38
BLAKE2b-256 f0254e26e5c0c8c34099eea5fc744e46f439032cdb16fe1671bc42b584786548

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b2cf8b6229ce6673f56ece9e154e3dce093417a809ab046bdb4e0f87044ffb0f
MD5 9d302aab87c5ba0fb0d1c291a6069841
BLAKE2b-256 84b89f19c79fc8b48a0617f80e2f7b9334c56de9d47e845926f0360b2d23fdcf

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 7.5 MB
  • Tags: CPython 3.8, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 5741074b5694150b8b01d39a928c0690c74463a2e851f5ff76f8b2f017497248
MD5 7e03f5fe77e579bb5ed1478d1229fb96
BLAKE2b-256 475b67c41fff2ba45685c1d3ddda02ff4e28db24a059ec5163c246c434722cd3

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl
  • Upload date:
  • Size: 7.3 MB
  • Tags: CPython 3.8, musllinux: musl 1.2+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d4d36e490d8b83d3819bc12ead9070a24278df121a603c87f93de95dbfad35cd
MD5 bd92491041b8e449c7a65eaa1726e4f6
BLAKE2b-256 2a652db77ecb2220c864f090301852d60ca909ebf6a40389ed8f51a41d3c2442

See more details on using hashes here.

File details

Details for the file prosody_events-0.2.0-cp38-cp38-manylinux_2_24_aarch64.whl.

File metadata

  • Download URL: prosody_events-0.2.0-cp38-cp38-manylinux_2_24_aarch64.whl
  • Upload date:
  • Size: 7.0 MB
  • Tags: CPython 3.8, manylinux: glibc 2.24+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.13 {"installer":{"name":"uv","version":"0.11.13","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for prosody_events-0.2.0-cp38-cp38-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 25db5e9d65ee2d4d19e3aaf12b5bdcc707cbea313dfc6ef1ea31f57ec9fc29f3
MD5 7917151a2c1865a0efa5d4fb94c7f486
BLAKE2b-256 6607c7cd63675be69fe68e7c66ee284bb536ff0f87f5750392aa632c36a43aa9

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