Skip to main content

The Python SDK For EMQ X Extension

Project description

Using Python to handle the hooks in EMQ X to realize client authentication, ACL check and message.

Install

EMQ X extension requires Python 3.6 or later

pip install emqx-extension-sdk

Download

Download EMQ X v4.1 +

Configuration

Use emqx-extension-hook plugins:

## etc/plugins/emqx_extension_hook.conf

## Search path for scripts/library
exhook.drivers.python3.path = /emqx-ext/examples/

## Initial module name
##
exhook.drivers.python3.init_module = client

example:

## ./examples/client.py

from emqx_extension.hooks import EmqxHookSdk, hooks_handler
from emqx_extension.hooks import EMQX_CLIENTINFO_PARSE_T, EMQX_MESSAGE_PARSE_T


class CustomHook(EmqxHookSdk):

    @hooks_handler(topics='testtopic/#', qos=1)
    def on_client_connect(self,
                          conninfo: EMQX_CLIENTINFO_PARSE_T = None,
                          props: dict = None,
                          state: list = None):
        print(f'[Python SDK] [on_client_connect] {conninfo.clientid} connecte')

    @hooks_handler()
    def on_client_connected(self,
                            clientinfo: EMQX_CLIENTINFO_PARSE_T,
                            state: list = None):
        print(
            f'[Python SDK] [on_client_connected] {clientinfo.clientid} connected')

    @hooks_handler()
    def on_client_check_acl(self, clientinfo: EMQX_CLIENTINFO_PARSE_T,
                            pubsub: str,
                            topic: str,
                            result: bool,
                            state: tuple) -> bool:
        print(
            f'[Python SDK] [on_client_check_acl] {clientinfo.username} check ACL: {pubsub} {topic}')
        if clientinfo.username == '':
            return False
        return True

    @hooks_handler()
    def on_client_authenticate(self, clientinfo: EMQX_CLIENTINFO_PARSE_T, authresult, state) -> bool:
        print(
            f'[Python SDK] [on_client_authenticate] {clientinfo.clientid} authenticate')
        if clientinfo.clientid != '':
            return True
        return False


emqx_hook = CustomHook(hook_module='client.emqx_hook')


def init():
    return emqx_hook.on_start()


def deinit():
    return

Load plugin

./bin/emqx_ctl plugins load emqx_extension_hook

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

emqx-extension-sdk-0.1.tar.gz (3.8 kB view hashes)

Uploaded Source

Supported by

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