Package: iofog
ioFog Python SDKThis SDK provides the following modules:microservices: Clients for Microservices to talk to ioFog (e.g. ioMessage and Web Socket clients)rest.controller: Client for Controller REST APIInstallationInstall python package:sudopython3-mpipinstalliofogMicroservicesThis module lets you easily build an ioElement. It gives you all the functionality to interact with ioFog via Local API. It contains all necessary methods for IoMessage transformation as well.send new message to ioFog (post_message)fetch next unread messages from ioFog (get_next_messages)fetch messages for time period and list of accessible publishers (get_next_messages_from_publishers_within_timeframe)get config options (get_config)get Agent's Edge Resources (get_edge_resources)create IoMessage, encode(decode) to(from) raw bytes, marshall(unmarshall) into(from) JSON object (IoMessage class methods)connect to ioFog Control Channel via WebSocket (establish_control_ws_connection)connect to ioFog Message Channel via WebSocket (establish_message_ws_connection) and publish new message via this channel (post_message_via_socket)UsageImport iofog client and additional classes to your project:fromiofog.microservices.clientimportClientfromiofog.microservices.exceptionimportIoFogExceptionfromiofog.microservices.iomessageimportIoMessagefromiofog.microservices.listenerimport*Create IoFog client with default settings:try:client=Client()exceptIoFogExceptionase:# client creation failed, e contains descriptionOr specify host, port, and container id explicitly:try:client=Client(id='container_id',host='iofog_host',port=6666)exceptIoFogExceptionase:# client creation failed, e contains descriptionREST callsGet list of next unread IoMessages:try:messages=client.get_next_messages()exceptIoFogExceptionase:# some error occurred, e contains descriptionPost new IoMessage to ioFog via REST call:msg=IoMessage()msg.infotype="infotype"msg.infoformat="infoformat"msg.contentdata="sdkjhwrtiy8wrtgSDFOiuhsrgowh4touwsdhsDFDSKJhsdkljasjklweklfjwhefiauhw98p328946982weiusfhsdkufhaskldjfslkjdhfalsjdf=serg4towhr"msg.contextdata=""msg.tag="tag"msg.groupid="groupid"msg.authid="authid"msg.authgroup="authgroup"msg.hash="hash"msg.previoushash="previoushash"msg.nonce="nonce"try:receipt=client.post_message(msg)exceptIoFogException,e:# some error occurred, e contains descriptionGet an array of IoMessages from specified publishers within given timeframe:query={'timeframestart':1234567890123,'timeframeend':1234567890123,'publishers':['sefhuiw4984twefsdoiuhsdf','d895y459rwdsifuhSDFKukuewf','SESD984wtsdidsiusidsufgsdfkh']}try:query_response=client.get_next_messages_from_publishers_within_timeframe(query)exceptIoFogException,e:# some error occurred, e contains descriptionGet container's config:try:config=client.get_config()exceptIoFogException,ex:# some error occurred, ex contains descriptionGet Agent's Edge Resources:try:edge_resources=client.get_edge_resources()exceptIoFogException,ex:# some error occurred, ex contains descriptionWebSocket callsTo use websocket connections you should implement listeners as follows:classMyControlListener(IoFogControlWsListener):defon_control_signal(self):# do smth on control signaldefon_edge_resources_signal(self):# Agent's Edge Resource list has been updatedclassMyMessageListener(IoFogMessageWsListener):defon_receipt(self,message_id,timestamp):# do smth with message receiptdefon_message(self,io_msg):# do smth with new messageAfter that you can establish websocket connections:client.establish_message_ws_connection(MyMessageListener())client.establish_control_ws_connection(MyControlListener())Each of those connections will be managed in a separate thread.After successful connection to message websocket you can send to it:client.post_message_via_socket(io_msg_instance)Message utilsConstruct IoMessage from JSON(both json string and python dictionary are acceptable):msg=IoMessage.from_json(json_msg)IoMessage to JSON:json_str=io_msg_instance.to_json()Construct IoMessage from raw bytes:msg=IoMessage.from_bytearray([0,4,...])Pack IoMessage into bytearray:msg_bytes=io_msg_instance.to_bytearray()Loggingfromiofog.microservices.logimportLoggerlog=Logger("first")log.debug("hello")log.info("world")log.warn("good")log.error("bye")Controller REST API ClientThis module provides a client for talking toioFog Controller's REST API.Usage# Import Client classfromiofog.rest.controller.clientimportClient# Instantiate Clientclient=Client(host="123.123.123.123",port=51121,email="hello@world.io"password="2uhi40ghas9"# Get Controller status and API versionstatus=client.get_status()print(status['versions']['controller'])# Create an Agentname="agent1"host="123.123.123.124"resp=client.create_agent(name,host)# Upgrade an Agentresp=client.upgrade_agent(name)# Create an Applicationyaml_file="/tmp/app.yaml"resp=client.create_app_from_yaml(yaml_file)# Get an Applicationapp_name="app1"resp=client.get_app(app_name)# Delete an Applicationresp=client.delete_app(app_name)