The Python SDK For EMQ X Extension
Project description
EMQ X extension Python SDK
Using Python to handle the hooks in EMQ X to record connection and disconnection information, realize client authentication, ACL check and message storage.
Install
EMQ X extension requires Python 3.6 or later :
pip3 install emqx-extension-sdk
The emqx-extension-sdk is open source, welcome to commit to help us improve the function.
Download
You can use the open source version for most functions, but only EMQ X Enterprise edition supports message storage.
Download EMQ X MQTT Broker v4.1 +
EMQ X Enterprise v4.1 is coming.
Configuration
Use emqx-extension-hook plugins:
## Setup the supported drivers
##
## Value: python2 | python3 | java
exhook.drivers = python3
## Search path for scripts/library
exhook.drivers.python3.path = data/extension/hooks.py
## Call timeout
##
## Value: Duration
##exhook.drivers.python3.call_timeout = 5s
## Initial module name
## Your filename or module name
exhook.drivers.python3.init_module = hooks
example:
## data/extension/hooks.py
from emqx_extension.hooks import EmqxHookSdk, hooks_handler
from emqx_extension.types import EMQX_CLIENTINFO_PARSE_T, EMQX_MESSAGE_PARSE_T
class CustomHook(EmqxHookSdk):
@hooks_handler()
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
# on_message_* only EMQ X Enterprise
@hooks_handler()
def on_message_publish(self, message: EMQX_MESSAGE_PARSE_T, state):
print(
f'[Python SDK] [on_message_publish] {message.topic} {message.payload}')
emqx_hook = CustomHook(hook_module=f'{__name__}.emqx_hook')
def init():
return emqx_hook.start()
def deinit():
return
Benchmark
Coming soon.
Load plugin
./bin/emqx_ctl plugins load emqx_extension_hook
Project details
Release history Release notifications | RSS feed
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.2.tar.gz
(4.1 kB
view hashes)
Built Distributions
Close
Hashes for emqx_extension_sdk-0.2-py3.6.egg
Algorithm | Hash digest | |
---|---|---|
SHA256 | 5dbcf0957fa0bee417e38fa16205b8a5ce6c5ec46c5687352fb6da1e7ab0b309 |
|
MD5 | 29c94dd9bbfbbea349791b058dbe7fcf |
|
BLAKE2b-256 | d29cee3a40eb2c20ea137fe70b1c8b50094137b19810cc63f3b6dba875646421 |
Close
Hashes for emqx_extension_sdk-0.2-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e433910ac3ebaa7c3db549ffa05ac208377b33d9c7ce155f542efa79f21c2980 |
|
MD5 | ff14df829b8d68877f7b8964115bf125 |
|
BLAKE2b-256 | 9ef76b2fa590c20ebf674483d5314d0f9f30d5f157a88c848f38e30ad1307804 |