Skip to main content

A new protocol for SDSS actors.

Project description

Python Versions PyPI version Build Status Documentation Status Coverage Status zenodo

CLU implements a new protocol for SDSS actor while providing support for legacy-style actor.

Features

  • Asynchronous API based on asyncio.

  • New-style actor with message passing based on AMQP and RabbitMQ.

  • Legacy-style actor for TCP socket communication via tron.

  • Tools for device handling.

  • Messages are validated JSON strings.

  • click-enabled command parser.

Installation

CLU can be installed using pip as

pip install sdss-clu

or from source

git clone https://github.com/sdss/clu
cd clu
pip install .

Development

clu uses uv for dependency management and packaging. To work with an editable install it’s recommended that you setup uv and install clu in a virtual environment by doing

uv sync --all-groups --all-extras

although it is also possible to install it using pip in editable mode

pip install -e .

We use ruff for linting and formatting. To check that your code conforms to the style guide run

ruff check python tests
ruff format --check python tests

Quick start

Creating a new actor with CLU is easy. To instantiate and run an actor you can simply do

import asyncio
from clu import AMQPActor

async def main(loop):
    actor = await Actor('my_actor').start()
    await actor.run_forever()

asyncio.run(main(loop))

Next, head to the Getting started section for more information about using actors. More examples are available here.

Why a new messaging protocol for SDSS?

Say whatever you want about it, the current SDSS message passing protocol based on Tron, opscore, and actorcore is stable and robust. So, why should we replace it? Here is a list of reasons:

  • It reinvents the wheel. Ok, in all honesty Tron and opscore were written when wheel were still not completely circular, but the truth is that nowadays there are more robust, standard, and better documented technologies out there for message passing.

  • We can remove the need for a central hub product by relying in open-source message brokers such as RabbitMQ.

  • Tron and opscore are Python 2 and it’s unclear the amount of effort that would be needed to convert them to Python 3.

  • While there is some documentation for Tron and opscore, and the code is well written, it’s also cumbersome and difficult to modify by people that didn’t write it. It’s ultimately non-maintainable.

  • The opsctore/actorkeys datamodel is custom-built and extremely difficult to maintain. Standard solutions such as JSON with a JSON schema validator should be preferred.

  • asyncio provides an asynchronous API that is cleaner and easier to code than using threads. It is also more readable and less convoluted than twisted and it’s a Python core library with very active development.

  • CLU uses click for parsing commands, providing a well-defined, easy to use parser.

Project details


Release history Release notifications | RSS feed

This version

2.6.1

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sdss_clu-2.6.1.tar.gz (124.0 kB view details)

Uploaded Source

Built Distribution

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

sdss_clu-2.6.1-py3-none-any.whl (143.2 kB view details)

Uploaded Python 3

File details

Details for the file sdss_clu-2.6.1.tar.gz.

File metadata

  • Download URL: sdss_clu-2.6.1.tar.gz
  • Upload date:
  • Size: 124.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sdss_clu-2.6.1.tar.gz
Algorithm Hash digest
SHA256 c99c285dfe802ca1509eacc250081d48c3f96111a4ad59bf419f6380b84b26c8
MD5 b0eda4f349fd3ad974a6f6cb92f29534
BLAKE2b-256 1968abd7a7b71a41700863db4e679adadc4605d8bde65248835f67da8e121a98

See more details on using hashes here.

Provenance

The following attestation bundles were made for sdss_clu-2.6.1.tar.gz:

Publisher: release.yml on sdss/clu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sdss_clu-2.6.1-py3-none-any.whl.

File metadata

  • Download URL: sdss_clu-2.6.1-py3-none-any.whl
  • Upload date:
  • Size: 143.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sdss_clu-2.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 098594aa4fa9ef847bd176f55d2e072b3e503202034cf841597880ff475f8fca
MD5 6dcbabe3c9d1d9bc0f032052bb1bd43f
BLAKE2b-256 babe25dda3c989b9fe234b7b769388e74a00aac21fc51df1620c188f6baa65d4

See more details on using hashes here.

Provenance

The following attestation bundles were made for sdss_clu-2.6.1-py3-none-any.whl:

Publisher: release.yml on sdss/clu

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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