push-pull web service
This commit is contained in:
commit
e5d4e92939
5
config.ini
Normal file
5
config.ini
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
|
||||||
|
|
||||||
|
[server]
|
||||||
|
server_host = 127.0.0.1
|
||||||
|
server_port = 8081
|
76
main.py
Normal file
76
main.py
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import cherrypy
|
||||||
|
from cherrypy.lib.static import serve_file
|
||||||
|
import socket
|
||||||
|
|
||||||
|
import configparser
|
||||||
|
|
||||||
|
from pubsub import pub
|
||||||
|
import time
|
||||||
|
|
||||||
|
PATH = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
|
||||||
|
config = configparser.ConfigParser()
|
||||||
|
config.read("config.ini")
|
||||||
|
TIMEOUT = 60 #sec
|
||||||
|
|
||||||
|
|
||||||
|
class MainApp:
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.received_data = None
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def submit(self, topic, data):
|
||||||
|
"""
|
||||||
|
This is where publisher can submit data
|
||||||
|
"""
|
||||||
|
pub.sendMessage(topic, data=data)
|
||||||
|
return "Published data to {}".format(topic)
|
||||||
|
|
||||||
|
def msg_listener(self, data):
|
||||||
|
self.received_data = data
|
||||||
|
|
||||||
|
|
||||||
|
@cherrypy.expose
|
||||||
|
def poll(self, topic):
|
||||||
|
"""
|
||||||
|
Subscribers wait here for changes
|
||||||
|
"""
|
||||||
|
|
||||||
|
pub.subscribe(self.msg_listener, topic)
|
||||||
|
|
||||||
|
# wait for the data to come
|
||||||
|
rcv_data = self.received_data
|
||||||
|
s = time.time()
|
||||||
|
while not rcv_data and (time.time() - s) < TIMEOUT:
|
||||||
|
rcv_data = self.received_data
|
||||||
|
|
||||||
|
if (time.time() - s) > TIMEOUT:
|
||||||
|
raise cherrypy.HTTPError(408, "Timeout Error. Publisher did not publish any data")
|
||||||
|
|
||||||
|
self.received_data = None
|
||||||
|
pub.unsubscribe(self.msg_listener, topic)
|
||||||
|
return rcv_data
|
||||||
|
|
||||||
|
|
||||||
|
ROOT = MainApp()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
cherrypy.server.socket_host = config["server"].get("server_host", "127.0.0.1")
|
||||||
|
cherrypy.server.socket_port = config["server"].getint("server_port", 8081)
|
||||||
|
ENGINE = cherrypy.engine
|
||||||
|
|
||||||
|
cherrypy.tree.mount(ROOT)
|
||||||
|
if hasattr(ENGINE, "signal_handler"):
|
||||||
|
ENGINE.signal_handler.subscribe()
|
||||||
|
if hasattr(ENGINE, "console_control_handler"):
|
||||||
|
ENGINE.console_control_handler.subscribe()
|
||||||
|
try:
|
||||||
|
ENGINE.start()
|
||||||
|
except Exception:
|
||||||
|
sys.exit(1)
|
||||||
|
else:
|
||||||
|
ENGINE.block()
|
Loading…
Reference in New Issue
Block a user