Skip to main content

High-performance Python bindings for the Mongoose embedded networking library

Project description

cymongoose

Python bindings for the Mongoose embedded networking library, built with Cython.

Overview

cymongoose provides Pythonic access to Mongoose, a lightweight embedded networking library written in C. It supports HTTP servers, WebSocket, TCP/UDP sockets, and more through a clean, event-driven API.

Features

Core Protocols

  • HTTP/HTTPS: Server and client with TLS support, chunked transfer encoding, SSE
  • WebSocket/WSS: Full WebSocket support with text/binary frames over TLS
  • MQTT/MQTTS: Publish/subscribe messaging with QoS support
  • TCP/UDP: Raw socket support with custom protocols
  • DNS: Asynchronous hostname resolution
  • SNTP: Network time synchronization

Advanced Features

  • TLS/SSL: Certificate-based encryption with custom CA support
  • Timers: Periodic callbacks with precise timing control
  • Flow Control: Backpressure handling and buffer management
  • Authentication: HTTP Basic Auth, MQTT credentials
  • JSON Parsing: Built-in JSON extraction utilities
  • URL Encoding: Safe URL parameter encoding

Technical

  • Event-driven: Non-blocking I/O with a simple event loop
  • Low overhead: Thin Cython wrapper over native C library
  • Python 3.10+: Modern Python with type hints
  • Comprehensive: 244 tests, 100% pass rate
  • Production Examples: 17 complete examples from Mongoose tutorials
  • TLS Support: Built-in TLS/SSL encryption (MG_TLS_BUILTIN)
  • GIL Optimization: 21 methods release GIL for true parallel execution
  • High Performance: 60k+ req/sec (6-37x faster than pure Python frameworks)

Installation

From pypi

pip install cymongoose

From source

# Clone the repository
git clone https://github.com/shakfu/cymongoose
cd cymongoose
make

Also type make help gives you a list of commands

Requirements

  • Python 3.10 or higher
  • CMake 3.15+
  • Cython 3.0+
  • C compiler (gcc, clang, or MSVC)

Quick Start

Note: These examples bind to 127.0.0.1 (localhost only). For production, use 0.0.0.0 to listen on all interfaces.

Simple HTTP Server

from cymongoose import Manager, MG_EV_HTTP_MSG

def handler(conn, event, data):
    if event == MG_EV_HTTP_MSG:
        conn.reply(200, "Hello, World!")

mgr = Manager(handler)
mgr.listen("http://127.0.0.1:8000", http=True)
print("Server running on http://localhost:8000. Press Ctrl+C to stop.")
mgr.run()

Serve Static Files

from cymongoose import Manager, MG_EV_HTTP_MSG

def handler(conn, event, data):
    if event == MG_EV_HTTP_MSG:
        conn.serve_dir(data, root_dir="./public")

mgr = Manager(handler)
mgr.listen("http://127.0.0.1:8000", http=True)
mgr.run()

WebSocket Echo Server

from cymongoose import Manager, MG_EV_HTTP_MSG, MG_EV_WS_MSG

def handler(conn, event, data):
    if event == MG_EV_HTTP_MSG:
        conn.ws_upgrade(data)  # Upgrade HTTP to WebSocket
    elif event == MG_EV_WS_MSG:
        conn.ws_send(data.text)  # Echo back

mgr = Manager(handler)
mgr.listen("http://127.0.0.1:8000", http=True)
mgr.run()

Per-Listener Handlers (new)

Run different handlers on different ports. Accepted connections automatically inherit the handler from their listener:

from cymongoose import Manager, MG_EV_HTTP_MSG

def api_handler(conn, event, data):
    if event == MG_EV_HTTP_MSG:
        conn.reply(200, '{"status":"ok"}', {"Content-Type": "application/json\r\n"})

def web_handler(conn, event, data):
    if event == MG_EV_HTTP_MSG:
        conn.serve_dir(data, root_dir="./public")

mgr = Manager()  # no default handler needed
mgr.listen("http://127.0.0.1:8080", handler=api_handler, http=True)
mgr.listen("http://127.0.0.1:8090", handler=web_handler, http=True)
mgr.run()

Examples

The project includes several complete examples translated from Mongoose C tutorials:

Core HTTP/WebSocket

  • HTTP Server - Static files, TLS, multipart uploads, REST API
  • HTTP Client - GET/POST, TLS, timeouts, custom headers
  • WebSocket Server - Echo, mixed HTTP+WS, client tracking
  • WebSocket Broadcasting - Timer-based broadcasts to multiple clients

MQTT

  • MQTT Client - Pub/sub, QoS, reconnection, keepalive
  • MQTT Broker - Message routing, topic matching, subscriptions

Specialized HTTP

  • HTTP Streaming - Chunked transfer encoding, large responses
  • HTTP File Upload - Disk streaming, multipart forms
  • RESTful Server - JSON API, CRUD operations, routing
  • Server-Sent Events - Real-time push updates

Network Protocols

  • SNTP Client - Network time sync over UDP
  • DNS Client - Async hostname resolution
  • TCP Echo Server - Raw TCP sockets, custom protocols
  • UDP Echo Server - Connectionless datagrams

Advanced Features

  • TLS HTTPS Server - Certificate-based encryption, SNI
  • HTTP Proxy Client - CONNECT method tunneling
  • Multi-threaded Server - Background workers, Manager.wakeup()

All examples include:

  • Production-ready patterns (signal handlers, graceful shutdown)
  • Command-line arguments for flexibility
  • Comprehensive test coverage (42 tests)
  • Detailed documentation with C tutorial references

See tests/examples/README.md for usage instructions and tests/examples/ for source code.

API Reference

Manager

The main event loop manager.

mgr = Manager(handler=None, enable_wakeup=False)

Core Methods:

  • poll(timeout_ms=0) - Run one iteration of the event loop
  • run(poll_ms=100) - Run the event loop until SIGINT/SIGTERM, then close
  • listen(url, handler=None) - Create a listening socket (handler is inherited by accepted children)
  • connect(url, handler=None) - Create an outbound connection
  • close() - Free resources

Protocol-Specific:

  • http_listen(url, handler=None) - Create HTTP server
  • http_connect(url, handler=None) - Create HTTP client
  • ws_connect(url, handler=None) - WebSocket client
  • mqtt_connect(url, handler=None, client_id, username, password, ...) - MQTT client
  • mqtt_listen(url, handler=None) - MQTT broker
  • sntp_connect(url, handler=None) - SNTP time client
  • timer_add(milliseconds, callback, repeat=False, run_now=False) - Add timer, returns Timer with .cancel() and .active
  • wakeup(connection_id, data) - Wake connection from another thread

Connection

Represents a network connection.

# Send data
conn.send(data)                    # Raw bytes
conn.reply(status, body, headers)  # HTTP response
conn.ws_upgrade(message)           # Upgrade HTTP to WebSocket
conn.ws_send(data, op)             # WebSocket frame

# HTTP
conn.serve_dir(message, root_dir)  # Serve static files
conn.serve_file(message, path)     # Serve single file
conn.http_chunk(data)              # Send chunked data
conn.http_sse(event_type, data)    # Server-Sent Events
conn.http_basic_auth(user, pass_)  # HTTP Basic Auth

# MQTT
conn.mqtt_pub(topic, message, ..)  # Publish an MQTT message
conn.mqtt_sub(topic, qos=0)        # Subscribe to an MQTT topic
conn.mqtt_ping()                   # Send MQTT ping
conn.mqtt_pong()                   # Send MQTT pong
conn.mqtt_disconnect()             # Send MQTT disconnect message

# SNTP
conn.sntp_request()                # Request time

# TLS
conn.tls_init(TlsOpts(...))        # Initialize TLS
conn.tls_free()                    # Free TLS resources

# DNS
conn.resolve(url)                  # Async DNS lookup
conn.resolve_cancel()              # Cancel DNS lookup

# Connection management
conn.drain()                       # Graceful close (flush buffer first)
conn.close()                       # Immediate close
conn.error(message)                # Trigger error event

# Properties
conn.is_listening                  # Listener socket?
conn.is_websocket                  # WebSocket connection?
conn.is_tls                        # TLS/SSL enabled?
conn.is_udp                        # UDP socket?
conn.is_readable                   # Data available?
conn.is_writable                   # Can write?
conn.is_full                       # Buffer full? (backpressure)
conn.is_draining                   # Draining before close?
conn.id                            # Connection ID
conn.handler                       # Current handler
conn.set_handler(fn)               # Set handler (propagates to children if listener)
conn.userdata                      # Custom Python object
conn.local_addr                    # (ip, port) tuple
conn.remote_addr                   # (ip, port) tuple

# Buffer access
conn.recv_len                      # Bytes in receive buffer
conn.send_len                      # Bytes in send buffer
conn.recv_size                     # Receive buffer capacity
conn.send_size                     # Send buffer capacity
conn.recv_data(n)                  # Read from receive buffer
conn.send_data(n)                  # Read from send buffer

TlsOpts

TLS/SSL configuration.

opts = TlsOpts(
    ca=None,                       # CA certificate (PEM)
    cert=None,                     # Server/client certificate (PEM)
    key=None,                      # Private key (PEM)
    name=None,                     # Server name (SNI)
    skip_verification=False        # Skip cert validation (dev only!)
)

HttpMessage

HTTP request/response view.

msg.method                         # "GET", "POST", etc.
msg.uri                            # "/path"
msg.query                          # "?key=value"
msg.proto                          # "HTTP/1.1"
msg.body_text                      # Body as string
msg.body_bytes                     # Body as bytes
msg.header("Name")                 # Get header value
msg.headers()                      # All headers as list of tuples
msg.query_var("key")               # Extract query parameter
msg.status()                       # HTTP status code
msg.header_var(header, var)        # Extract variable from header

WsMessage

WebSocket frame data.

ws.text                            # Frame data as string
ws.data                            # Frame data as bytes
ws.flags                           # WebSocket flags

MqttMessage

MQTT message data.

mqtt.topic                         # Topic as string
mqtt.data                          # Payload as bytes
mqtt.id                            # Message ID
mqtt.cmd                           # MQTT command
mqtt.qos                           # Quality of Service (0-2)
mqtt.ack                           # Acknowledgment flag

Event Constants

# Core events
MG_EV_ERROR                        # Error occurred
MG_EV_OPEN                         # Connection created
MG_EV_POLL                         # Poll iteration
MG_EV_RESOLVE                      # DNS resolution complete
MG_EV_CONNECT                      # Outbound connection established
MG_EV_ACCEPT                       # Inbound connection accepted
MG_EV_TLS_HS                       # TLS handshake complete
MG_EV_READ                         # Data available to read
MG_EV_WRITE                        # Data written
MG_EV_CLOSE                        # Connection closed

# Protocol events
MG_EV_HTTP_MSG                     # HTTP message received
MG_EV_WS_OPEN                      # WebSocket handshake complete
MG_EV_WS_MSG                       # WebSocket message received
MG_EV_MQTT_CMD                     # MQTT command received
MG_EV_MQTT_MSG                     # MQTT message received
MG_EV_MQTT_OPEN                    # MQTT connection established
MG_EV_SNTP_TIME                    # SNTP time received
MG_EV_WAKEUP                       # Wakeup notification

Utility Functions

# JSON parsing
json_get(json_str, "$.path")           # Get JSON value
json_get_num(json_str, "$.number")     # Get as number
json_get_bool(json_str, "$.bool")      # Get as boolean
json_get_long(json_str, "$.int", default=0)  # Get as long
json_get_str(json_str, "$.string")     # Get as string

# URL encoding
url_encode(data)                       # Encode for URL

# Multipart forms
http_parse_multipart(body, offset=0)   # Parse multipart data

Testing

The project includes a comprehensive test suite with 244 tests (100% passing):

Test Coverage by Feature

Core Functionality (168 tests):

  • HTTP/HTTPS: Server, client, headers, query params, chunked encoding, SSE (40 tests)
  • WebSocket: Handshake, text/binary frames, opcodes (10 tests)
  • MQTT: Connect, publish, subscribe, ping/pong, disconnect (11 tests)
  • TLS/SSL: Configuration, initialization, handshake integration (15 tests)
  • Timers: Single-shot, repeating, cancellation, thread-safe cancel, GC safety (16 tests)
  • DNS: Resolution, cancellation (4 tests)
  • SNTP: Time requests, format validation (5 tests)
  • JSON: Parsing, type conversion, nested access (9 tests)
  • Buffer Access: Direct buffer inspection, flow control (10 tests)
  • Connection State: Lifecycle, properties, events (15+ tests)
  • Security: HTTP Basic Auth, TLS properties (6 tests)
  • Utilities: URL encoding, multipart forms, wakeup (10 tests)
  • Flow Control: Drain, backpressure (4 tests)

Example Tests:

  • HTTP/WebSocket examples
  • MQTT examples
  • Specialized HTTP examples
  • Network protocols
  • Advanced features
  • README example validation
  • WebSocket broadcast examples

Running Tests

make test                                          # Run all tests (244 tests)
uv run python -m pytest tests/ -v                  # Verbose output
uv run python -m pytest tests/test_http_server.py  # Run specific file
uv run python -m pytest tests/ -k "test_timer"     # Run matching tests
uv run python -m pytest tests/examples/            # Run example tests only

Test Infrastructure

  • Dynamic port allocation prevents conflicts
  • Background polling threads for async operations
  • Proper cleanup in finally blocks
  • 100% pass rate (244/244 tests passing)
  • WebSocket tests require websocket-client (uv add --dev websocket-client)

Memory Safety Testing

AddressSanitizer (ASAN) support is available for detecting memory errors:

make build-asan                        # Build with ASAN enabled
make test-asan                         # Run tests with memory error detection

This detects use-after-free, buffer overflows, and other memory bugs at runtime.

macOS note: build-asan compiles a small helper (build/run_asan) that injects the ASAN runtime via DYLD_INSERT_LIBRARIES before exec'ing Python. This is necessary because macOS SIP strips DYLD_INSERT_LIBRARIES from processes spawned by system binaries (/usr/bin/make, /bin/sh).

Development

The project uses scikit-build-core with CMake to build the Cython extension, and uv for environment and dependency management.

make build          # Rebuild the Cython extension
make test           # Run all tests
make clean          # Remove build artifacts
make help           # Show all available targets

Architecture

  • CMake build (CMakeLists.txt): Cythonizes .pyx and compiles the extension via scikit-build-core
  • Cython bindings (src/cymongoose/_mongoose.pyx): Python wrapper classes
  • C declarations (src/cymongoose/mongoose.pxd): Cython interface to Mongoose C API
  • Vendored Mongoose (thirdparty/mongoose/): Embedded C library

Performance Optimization

The wrapper achieves C-level performance through aggressive optimization:

GIL Release (nogil):

  • 21 critical methods release GIL for true parallel execution
  • Network: send(), close(), resolve(), resolve_cancel()
  • WebSocket: ws_send(), ws_upgrade()
  • MQTT: mqtt_pub(), mqtt_sub(), mqtt_ping(), mqtt_pong(), mqtt_disconnect()
  • HTTP: reply(), serve_dir(), serve_file(), http_chunk(), http_sse()
  • TLS: tls_init(), tls_free()
  • Utilities: sntp_request(), http_basic_auth(), error()
  • Properties: local_addr, remote_addr
  • Thread-safe: Manager.wakeup()

TLS Compatibility:

  • TLS and nogil work together safely
  • Mongoose's built-in TLS is event-loop based (no internal locks)
  • Both optimizations enabled by default

Benchmark Results (Apple Silicon, wrk -t4 -c100 -d10s):

  • cymongoose: 60,973 req/sec (1.67ms latency)
  • aiohttp: 42,452 req/sec (1.44x slower)
  • FastAPI/uvicorn: 9,989 req/sec (6.1x slower)
  • Flask: 1,627 req/sec (37.5x slower)

See docs/nogil_optimization_summary.md and benchmarks/RESULTS.md for details.

License

This project is licensed under the GNU General Public License v2.0 or later (GPL-2.0-or-later), matching the Mongoose C library license. See LICENSE for details.

For use in proprietary/closed-source projects, a commercial Mongoose license from Cesanta is required.

Links

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

cymongoose-0.1.12.tar.gz (582.9 kB view details)

Uploaded Source

Built Distributions

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

cymongoose-0.1.12-cp314-cp314-win_amd64.whl (238.5 kB view details)

Uploaded CPython 3.14Windows x86-64

cymongoose-0.1.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (297.6 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cymongoose-0.1.12-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (289.4 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

cymongoose-0.1.12-cp314-cp314-macosx_11_0_arm64.whl (238.4 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

cymongoose-0.1.12-cp314-cp314-macosx_10_15_x86_64.whl (272.4 kB view details)

Uploaded CPython 3.14macOS 10.15+ x86-64

cymongoose-0.1.12-cp313-cp313-win_amd64.whl (232.0 kB view details)

Uploaded CPython 3.13Windows x86-64

cymongoose-0.1.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (296.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cymongoose-0.1.12-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (286.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

cymongoose-0.1.12-cp313-cp313-macosx_11_0_arm64.whl (237.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

cymongoose-0.1.12-cp313-cp313-macosx_10_13_x86_64.whl (271.9 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

cymongoose-0.1.12-cp312-cp312-win_amd64.whl (232.4 kB view details)

Uploaded CPython 3.12Windows x86-64

cymongoose-0.1.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (296.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cymongoose-0.1.12-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (285.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

cymongoose-0.1.12-cp312-cp312-macosx_11_0_arm64.whl (238.0 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

cymongoose-0.1.12-cp312-cp312-macosx_10_13_x86_64.whl (272.3 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

cymongoose-0.1.12-cp311-cp311-win_amd64.whl (236.6 kB view details)

Uploaded CPython 3.11Windows x86-64

cymongoose-0.1.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (300.8 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cymongoose-0.1.12-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (292.3 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

cymongoose-0.1.12-cp311-cp311-macosx_11_0_arm64.whl (240.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

cymongoose-0.1.12-cp311-cp311-macosx_10_9_x86_64.whl (269.6 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

cymongoose-0.1.12-cp310-cp310-win_amd64.whl (236.1 kB view details)

Uploaded CPython 3.10Windows x86-64

cymongoose-0.1.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl (301.0 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64manylinux: glibc 2.28+ x86-64

cymongoose-0.1.12-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl (291.8 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64manylinux: glibc 2.28+ ARM64

cymongoose-0.1.12-cp310-cp310-macosx_11_0_arm64.whl (240.9 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

cymongoose-0.1.12-cp310-cp310-macosx_10_9_x86_64.whl (269.6 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file cymongoose-0.1.12.tar.gz.

File metadata

  • Download URL: cymongoose-0.1.12.tar.gz
  • Upload date:
  • Size: 582.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for cymongoose-0.1.12.tar.gz
Algorithm Hash digest
SHA256 87e3690c3a7f437ea807d5fecdc29b8905c41070da9acda9e4c23b4c65da2fdd
MD5 a478789fc1bcbe4adbc449b937fd459b
BLAKE2b-256 f3d3e881ccad678ed12fe5844e40525d5e784751a1dec144b7e5a73dcfbf6fea

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 54738b8e5181ddf57eec782b6d3c9291b10e4eda8ee0daf750457ea5045ba466
MD5 9d3c0d8cf9fedf8dbc07b3f65eb59964
BLAKE2b-256 16511072ce0d528869c88f2b641cdbac53db21854fe8ee022b898809d8a543be

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2e1833b6dcce5117f53bdc5987920908557d726c99f978eed7fdcd0be34ef619
MD5 50308a23074142f31fe277b7a7478d7f
BLAKE2b-256 3caa836fb01c0ce41350ebf4000728e20b252df6f725cd52d005ed1046d2ae41

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 0edbc342fb583b7783ca2b8c421c189aa2c4da27cda44490da7981cbcb3ff781
MD5 caa31c30ab29a24abc889d0b3d78772d
BLAKE2b-256 d3cb10366126dac3b3bd0bd077890f7b66265ed2334d543a5679bce3cf371749

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d862511ba5a5e64285a1d9ebb1628d6a8aad5737d34cd4fdb43302932bf32375
MD5 c54c08cb9e302ac1f003fd6d983ff63b
BLAKE2b-256 6ad6a704f14895f2e06d989cbf6b568345a23195418443253c6c5262f014d8cd

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp314-cp314-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp314-cp314-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 46387bbefb3faea109a5f29b64bcfa78ec252e243513233e30e72b26d60f76c5
MD5 7ca6d297bb7632bed0464af86ee8923b
BLAKE2b-256 71b9d71952727abe485749e5664504e821a57436e8bfefb492f60ee249ff37cb

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 3ddb1b58408df00f92dbf8af515f25614a483eb0324bdad52bfe309532f7c2be
MD5 26d1bb200b9132fce16e57a087ebfac7
BLAKE2b-256 b412f76d4347cf799c70f165dcf776e64dba00548ab6ba7332023fc7b09f4719

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 4be61532a37346c851583edba34e16f5207243ff527298e3be7fc8774f6e2e74
MD5 d510f3c8312a3733c3b86e5427c0d2d6
BLAKE2b-256 cbc424f6db22ec4a51cf78c3e90d4e2b18901a148e63b76dce11b5f3ff809ce5

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 a8bbaeb376c7d358f08a3036f6e779ed1e438d6ed98f8738e28c5f30489ccfe1
MD5 2c503d4ef899fe9676310996003141f5
BLAKE2b-256 df3ce2ae30c6efc412e233f7c963e7af7e8cbcb9444a6e04cfe0a8d3e2d413dd

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 df77d519b336d64ba6dfd0a67793450fb16ebc78afc9b4730e265df74b761363
MD5 7c02f1dfc117420fcdf9f01ae2e6c2f0
BLAKE2b-256 9ad1883d8ca94a44e9b8a1da4d343e2f1157cff32bb6a831fe022e5fa74ad498

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 0e4018a666412a083d0d1517342c8f2ec7302b42b518b094247e100aa292bd02
MD5 b6d712d1f12e2eb69eef997b710dc7ff
BLAKE2b-256 33d5b534a80f58ec8393ddf6dddd4f45fcc4a8508bcc2fd93e06857b1bcb3bf8

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5e7a948ebebbbdfac770c5598879cc35d40228ce5e49bdf2ed946c3d2fb739be
MD5 4875eff23985cddb6a3d72febbfc8066
BLAKE2b-256 e3952dce2000d176663f2a3bd508fd76c63d4b08a1a52f80f02a3a7371e9c04b

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6bd865f27787438f949282a0d280099dd4d60e7f29209ca2f9134ea415afb301
MD5 e83a8ad9ad26fbedc75173542bc339b7
BLAKE2b-256 6b311549908f817ee71dde2bf7634376694f95f46f3c02050e088a92c9321cf2

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 6856a96677ba940658725e758ec98d1697b0c4cb022f87b13fafffd42b7ecd41
MD5 2e99e4537928612551d96f7a77d2fadf
BLAKE2b-256 0d336105530005347d5966a88b7c6b7dee10354d9df9f81aa69d0df41bd74f76

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2c9c059a1f24f7286f860c8104792a4eb904c945d65b092d9c4f356a366078bb
MD5 80a0c223b2660287e0b0d45facdf8859
BLAKE2b-256 d437b70a1ca12b1e7b3074669e80c60ee4d86951d4a38f2931913343be8139bc

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 31e81846ff261c7092f34ba70e61e161178865dbb9ef0c6f89de9631f20455aa
MD5 1b2b0df3437a065acb0eef5918edd538
BLAKE2b-256 f624660f390a9fea5e26591d156512e6bf5df9afc3411dd2cfaccd47d6db9022

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 2208ad081c8f42ca2fa5b171ddf8291123e8bb7a7c8c8c321bbf6b60ae12ada3
MD5 5cbd24ff842c274a9a4e2f9fbd5fc4ac
BLAKE2b-256 0d5804b4a7eb4dba43129389e480ec3c08e03ce10aee0fe24f72a665e2880b3f

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3f91c963c093212c442514664efa5b682fb3b7e47cd838d8ecce4e810b925636
MD5 1225269caceee6cab5ffe926a922cf01
BLAKE2b-256 ecd173f0a727dd8a2ab822f772cc0a3e930a2985bfbd07d641e3a3a78db63b0b

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 30951a33d891a98f41abf4f344354cf8d651787e72a125e844896556766e9a1d
MD5 822050a2c1111fba316991b535c609db
BLAKE2b-256 dd4b23d5d7187db91cf5e8dbde3abe6a89b344f5b8c957d822f6cbad29abcb06

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 98cfcd40212a9d83bcd1ee90cbfc30164e3d97315bcce12218e333304a42aef6
MD5 649b66ac6b21bd5579f2d77c563c5dda
BLAKE2b-256 833e8f3ce66793d7c35f651c411fc6a29ede0f9aff02b55b9ead3b02e4515f1a

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6059c576085b9b242fcd9ff873972438bd289a51ac10c34f69aed4f5c5b23b7b
MD5 a1c13d26ce21978557692a2280036c45
BLAKE2b-256 bbd56567df3c7aa1b7cb7f973a360b91c80f5be0e81784f3c7b66b79e3dd80ac

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8bf7e11195ae83d52efb3830a81c1fb5a23edb37d10629b25ad2c7255a4bc22c
MD5 5b180b1a731f3d9b1ee874ca8ad7ae80
BLAKE2b-256 a45a36f6816e287655a3f6207589782eeda4197586bdc61f61934774c4a2249f

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0bcfa9a8d37b0d4a8c73b1abc63e60d88bde97396fce443f1dd561e53ea60328
MD5 a1650b54fa61ddf7c8ba08d71e0e9525
BLAKE2b-256 ddb56f19c25d1ab3965f64083a98a019e2106a3a058125567c98a86ade2b19ad

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 f60c692d4ff8c89700d754d3b12ae527716b0b2a30cd1116b798560f118fcda7
MD5 2a5ccad0fd5d12a2bd0eda175f1ddd2e
BLAKE2b-256 5a54db77e8e235b7caf7232d4890cab47c3fa4d84c5d014f6697946b13ffeedc

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c163454b56a745e2652aba34eadb05370f055a53e799664a1d48709e6267bc35
MD5 6125395fcf363346fbe16ba297404fb4
BLAKE2b-256 1ffc3249cb59fca108e0c33273c1bf8faff778b598adcdf56e40735d63196751

See more details on using hashes here.

File details

Details for the file cymongoose-0.1.12-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for cymongoose-0.1.12-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2f205508692ff849892e602b0c9935242f3e80fa550863e9def3271c80a3757a
MD5 048fbab7ae3e51ac689588aceaabb631
BLAKE2b-256 fb71e4617fbc173bffe38943fad1faaa6e400c0160b251cd5bc1ef7b6b4f8d80

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