Skip to main content

A pub-sub client library for Multi-messenger Astrophysics

Project description

Hop Client

codecov

Docs: https://hop-client.readthedocs.io/en/stable/

hop-client is a pub-sub client library for Multimessenger Astrophysics.

Installation

You can install hop either via pip, conda, or from source.

To install with pip:

pip install -U hop-client

To install with conda, you must use the channel from the SCiMMA Anaconda organization:

conda install --channel scimma hop-client

To install from source:

tar -xzf hop-client-x.y.z.tar.gz
cd hop-client-x.y.z
python setup.py install

Quickstart

By default, authentication is enabled, reading in configuration settings from config.toml. The path to this configuration can be found by running hop auth locate. One can initialize this configuration with default settings by running hop auth setup. To disable authentication in the CLI client, one can run --no-auth.

Command Line Interface

Publish a message:

hop publish kafka://hostname:port/gcn -f CIRCULAR example.gcn3

Example messages are provided in tests/data including:

  • A GCN circular (example.gcn3)
  • A VOEvent (example_voevent.xml)

Consume messages:

hop subscribe kafka://hostname:port/gcn -s EARLIEST

This will read messages from the gcn topic from the earliest offset and read messages until an end of stream (EOS) is received.

Python API

Publish messages:

Using the python API, we can publish various types of messages, including structured messages such as GCN Circulars and VOEvents:

from hop import stream
from hop.models import GCNCircular

# read in a GCN circular
with open("path/to/circular.gcn3", "r") as f:
    circular = GCNCircular.load(f)

with stream.open("kafka://hostname:port/topic", "w") as s:
    s.write(circular)

In addition, we can also publish unstructured messages as long as they are JSON serializable:

from hop import stream

with stream.open("kafka://hostname:port/topic", "w") as s:
    s.write({"my": "message"})

By default, authentication is enabled for the Hop broker, reading in configuration settings from config.toml. In order to modify various authentication options, one can configure a Stream instance and pass in an Auth instance with credentials:

from hop import Stream
from hop.auth import Auth

auth = Auth("my-username", "my-password")
stream = Stream(auth=auth)

with stream.open("kafka://hostname:port/topic", "w") as s:
    s.write({"my": "message"})

To explicitly disable authentication one can set auth to False.

Consume messages:

from hop import stream

with stream.open("kafka://hostname:port/topic", "r") as s:
    for message in s:
         print(message)

This will listen to the Hop broker, listening to new messages and printing them to stdout as they arrive until there are no more messages in the stream. By default, this will only process new messages since the connection was opened. The start_at option lets you control where in the stream you can start listening from. For example, if you'd like to listen to all messages stored in a topic, you can do:

from hop import Stream
from hop.io import StartPosition

stream = Stream(start_at=StartPosition.EARLIEST)

with stream.open("kafka://hostname:port/topic", "r") as s:
    for message in s:
         print(message)

Development

A Makefile is provided to ease in testing, deployment and generating documentation.

A list of commands can be listed with make help.

In addition, two extras are provided when installing the hop client that installs the required test and documentation libraries:

  • dev: dependencies required for testing, linting and packaging
  • docs: dependencies required for building documentation

Assuming you've cloned the repository and are in the project's root directory, you can install hop-client alongside all the required development dependencies by running:

pip install .[dev,docs]

Releases

To mark a new version, use Github tags to mark your commit with a semver version:

git tag v0.0.1

To release a new version and upload to package repositories, push your tag after pushing your commit:

git push --tags

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

hop-client-0.5.0.tar.gz (64.4 kB view details)

Uploaded Source

Built Distribution

hop_client-0.5.0-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file hop-client-0.5.0.tar.gz.

File metadata

  • Download URL: hop-client-0.5.0.tar.gz
  • Upload date:
  • Size: 64.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.15

File hashes

Hashes for hop-client-0.5.0.tar.gz
Algorithm Hash digest
SHA256 ea15cbfb972fc9ee208397234e6e5371df076bec1cdbacb35735b5c70731b14f
MD5 4d26e6174d3c777dbf21f31ff371e8f8
BLAKE2b-256 dea21f663c824b7e6ac139110005888cda7e1aea74e3bb8a57d774a00a1802f5

See more details on using hashes here.

File details

Details for the file hop_client-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: hop_client-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 24.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.6.15

File hashes

Hashes for hop_client-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2c355d43919b70e109b7e9bfe15646b083a156924a00b0f1e7b0e2733563f9ea
MD5 70eef7b020b47c7d57d4c8e74c494385
BLAKE2b-256 541575ec9fffa8b40506cb7793903b2d8262e28ea8c5d5bc7019f85766db15c0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page