0.2.4 • Published 5 years ago

filebus v0.2.4

Weekly downloads
2
License
ISC
Repository
github
Last release
5 years ago

filebus

Build Status Coverage Status

Social Media Photo by Juan Encalada on Unsplash

A communication channel based on files watcher.

Example

You can clone this repository and inotifywait-spawn in the same folder, enter into the filebus/example directory and launch npm start to see Python and NodeJS communicating with each other.

You can also grasp most of this utility via the following example:

const FileBus = require('filebus');

// new instance with either an input to listen for
// or an output to send messages ... or both!
const fb = new FileBus(
  input,  // optional input file to watch
  output  // optional output file to write
);

// INPUT relatd API

// will be triggered when the file will contain
// "ready" with eventually extra data as JSON
fb.on('ready', console.log);

// triggered when there are reading errors
// from the watched input file
fb.on('error', console.error);

// stop listening to events
// no more events triggered
fb.stop();


// OUTPUT related API

// will write the following into the output file
// "ready {"optional":"data"}"
// if there is a watcher listening for "ready",
// or any other event name, it will be invoked
// receiving the object {optional: 'data'}
fb.send('ready', {optional: 'data'}).then(() => {
  // executed once the content has been written
  // and also synced with the system
});


// HANDSHAKE

// whenever the input/output files are between two
// different instances of FileBus or two different PLs
// the handshake, from one of the two sides, grants
// that both instances are setup and ready to react

fb = new FileBus('.python', '.js', true);
// Python counterpart: fb = FileBus('.js', '.python')

// will happen once Python responds
fb.once('handshake', () => {
  fb.send('update-display', 'Hello World');
});

fb.handshake();

Communicate with Python 3

This module contains a python/filebus.py file where you can import FileBus and use pretty much exact same API.

Please note the python file also relies in this module dependencies, so that inotifywait-spawn module must be installed too, otherwise its python/inotifywait.py would be missing.

inotifywait requires the Python 3 inotify_simple module.

sudo pip3 install inotify_simple

To import FileBus you can write the following:

import os
import sys
sys.path.insert(1, os.path.realpath('./node_modules/filebus/python'))

from filebus import FileBus

fb = FileBus('test.txt', 'test.txt', True)
fb.on('ready', lambda data: print(data))
fb.send('ready')

# wait for events to trigger
import time
time.sleep(0.1)

# close and cleanup the file
fb.stop()

Practical Applications

The countdown project is fully based on FileBus to drive e-paper displays, via Python 3, from Node.js.

Check its JS side, or one of its Python counterparts.

0.2.4

5 years ago

0.2.3

5 years ago

0.2.2

5 years ago

0.2.1

5 years ago

0.2.0

5 years ago

0.1.1

5 years ago

0.1.0

5 years ago

0.0.5

5 years ago

0.0.4

5 years ago

0.0.3

5 years ago

0.0.1

5 years ago

0.0.0

5 years ago