Skip to main content

Lightweight, efficient and developer-friendly framework for component communication

Project description

drawing

FastCC

Ruff Mypy Gitmoji

Framework for component communication with MQTT and Protocol Buffers :boom:.

  • Lightweight :zap:
  • Efficient :rocket:
  • Developer-friendly :technologist:

This framework is built on top of empicano's aiomqtt.

Example

# app.py
from __future__ import annotations

import asyncio
import contextlib
import logging
import os
import sys

import fastcc

router = fastcc.Router()


@router.route("greet")
async def greet(name: str, *, database: dict[str, int]) -> str:
    """Greet a user.

    Parameters
    ----------
    name
        The name of the user.
        Autofilled by fastcc.
    database
        The database.
        Autofilled by fastcc.

    Returns
    -------
    str
        The greeting message.
    """
    # ... do some async work
    await asyncio.sleep(0.1)

    database[name] += 1
    occurrence = database[name]
    return f"Hello, {name}! Saw you {occurrence} times!"


async def main() -> None:
    """Run the app."""
    logging.basicConfig(level=logging.INFO)

    database: dict[str, int] = {"Alice": 0, "Bob": 0}
    app = fastcc.FastCC("localhost")
    app.add_router(router)
    app.add_injector(database=database)
    app.add_exception_handler(
        KeyError,
        lambda e: fastcc.MQTTError(repr(e), 404),
    )

    await app.run()


# https://github.com/empicano/aiomqtt?tab=readme-ov-file#note-for-windows-users
if sys.platform.lower() == "win32" or os.name.lower() == "nt":
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

with contextlib.suppress(KeyboardInterrupt):
    asyncio.run(main())
# client.py
from __future__ import annotations

import asyncio
import contextlib
import logging
import os
import sys

import fastcc

_logger = logging.getLogger(__name__)


async def main() -> None:
    """Run the app."""
    logging.basicConfig(level=logging.INFO)

    async with fastcc.Client("localhost") as client:
        try:
            response = await client.request(
                "greet",
                "Charlie",
                response_type=str,
            )
        except fastcc.MQTTError as e:
            details = f"An error occurred on the server: {e.message}"
            _logger.error(details)

        response = await client.request("greet", "Alice", response_type=str)
        _logger.info("response: %r", response)


# https://github.com/empicano/aiomqtt?tab=readme-ov-file#note-for-windows-users
if sys.platform.lower() == "win32" or os.name.lower() == "nt":
    asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())

with contextlib.suppress(KeyboardInterrupt):
    asyncio.run(main())

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

fastcc-4.0.1.tar.gz (14.4 kB view details)

Uploaded Source

Built Distribution

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

fastcc-4.0.1-py3-none-any.whl (15.4 kB view details)

Uploaded Python 3

File details

Details for the file fastcc-4.0.1.tar.gz.

File metadata

  • Download URL: fastcc-4.0.1.tar.gz
  • Upload date:
  • Size: 14.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for fastcc-4.0.1.tar.gz
Algorithm Hash digest
SHA256 30316376198d8c4906c56e24c380725322541102e562385c28626aad4caa9b06
MD5 2890377103b89c8b661a83c04faad985
BLAKE2b-256 7e63580a62e881e255ae710d20fe7d9392cd75b7892abeb7d4d14196e1bcf540

See more details on using hashes here.

File details

Details for the file fastcc-4.0.1-py3-none-any.whl.

File metadata

  • Download URL: fastcc-4.0.1-py3-none-any.whl
  • Upload date:
  • Size: 15.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.1

File hashes

Hashes for fastcc-4.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4fe008e8f24a125ca7ba617a6bae659bfc19d1505e53ba388d5cc28009fb2972
MD5 9671016b85448e13f6c652012df49e0b
BLAKE2b-256 24b79c89bf2655848f150475cc5450a8b092c730ebbd6d2c74afa98786b83e66

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