Metadata-Version: 2.1
Name: sfisop-messaging-sdk
Version: 1.0.3
Summary: SDK for the SmartOcean Platform Messaging Service
License: MIT
Author: The SmartOcean Consortium
Requires-Python: >=3.9,<4.0.0
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Requires-Dist: annotated-types (>=0.6.0,<0.7.0)
Requires-Dist: certifi (==2024.7.4)
Requires-Dist: charset-normalizer (>=3.3.2,<4.0.0)
Requires-Dist: dnspython (>=2.6.1,<3.0.0)
Requires-Dist: idna (>=3.7,<4.0)
Requires-Dist: paho-mqtt (>=2.1.0,<3.0.0)
Requires-Dist: pydantic-core (>=2.16.3,<3.0.0)
Requires-Dist: pymongo (==4.6.3)
Requires-Dist: python-dateutil (>=2.9.0.post0,<3.0.0)
Requires-Dist: python-decouple (>=3.8,<4.0)
Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
Requires-Dist: requests (>=2.32.0,<3.0.0)
Requires-Dist: six (>=1.16.0,<2.0.0)
Requires-Dist: urllib3 (>=2.2.2,<3.0.0)
Description-Content-Type: text/markdown

# Messaging Service Client SDK

Client library for accessing the realtime messaging services of the SmartOcean platform.

The messaging services rely on the [MQTT Standard](https://mqtt.org/) 

This client SDK implementation utilises the [Paho MQTT](https://pypi.org/project/paho-mqtt/) library. The Paho MQTT library may also be used directly to access the messaging services in case more advanced use is required.

## Credentials

Credentials for accessing the messaging service being consumed must be placed in a `.env` file with the following content

```
BROKER_USERNAME=<username>
BROKER_PASSWORD=<password>
```

## Configuration

Broker configuration information must be provided in a yaml configuration file with the following format:

```
BROKER_HOST: 
BROKER_PORT: 
BROKER_TOPIC: 
TOPIC_QOS: 
CLIENT_ID: 
```
The name of the configuration file in the example below is to be provided as a command-line argument when running the Python application.

## Sample Subscriber

A sample implementation accessing the messaging service as a subscriber:

```python

import sfisop.messaging_sdk.subscriber as mqtt_subscriber
import sfisop.messaging_sdk.configuration as mqtt_configuration

import logging

logging.basicConfig(filename='subscriber_client.log',
                    format="%(asctime)s[%(levelname)s]:%(message)s", encoding='utf-8',
                    level=logging.DEBUG)

logging.info("MQTT Subscriber Client module")


class DataConsumer(mqtt_subscriber.SubscriberClient):

    def __init__(self, config_file : str):

        mqtt_client_config = mqtt_configuration.ClientConfiguration(config_file)

        super().__init__(mqtt_client_config)

    def process_one(self, in_message):

        logging.info(f'Data Consumer process_one: {in_message}')


if __name__ == '__main__':

    config_file = mqtt_configuration.get_config_file()

    data_consumer = DataConsumer(config_file)

    data_consumer.run()
```

## Sample Publisher

A sample implementation accessing the messaging service as a publisher:

```python
from sfisop.messaging_sdk.publisher import PublisherClient
from sfisop.messaging_sdk.configuration import ClientConfiguration, get_config_file

if __name__ == '__main__':

    config_file = get_config_file()

    config = ClientConfiguration(config_file)

    publisher_client = PublisherClient(config)

    publisher_client.publish_one("Hello World Publisher Client")
```



