diff options
Diffstat (limited to 'gui/api/__init__.py')
| -rwxr-xr-x | gui/api/__init__.py | 55 | 
1 files changed, 36 insertions, 19 deletions
| diff --git a/gui/api/__init__.py b/gui/api/__init__.py index cef81c6..a535eb3 100755 --- a/gui/api/__init__.py +++ b/gui/api/__init__.py @@ -20,8 +20,8 @@  #   You should have received a copy of the GNU General Public License  #   along with ODR-DabMod.  If not, see <http://www.gnu.org/licenses/>. -import json  import cherrypy +from cherrypy.process import wspbus, plugins  from cherrypy.lib.httputil import parse_query_string  import urllib @@ -30,30 +30,47 @@ import os  import io  import datetime -def send_ok(data): -    return json.dumps({'status' : 'ok', 'data': data}).encode() +def send_ok(data=None): +    if data is not None: +        return {'status' : 'ok', 'data': data} +    else: +        return {'status': 'ok'}  def send_error(reason=""): -    return json.dumps({'status' : 'error', 'reason': reason}).encode() +    if reason: +        return {'status' : 'error', 'reason': reason} +    else: +        return {'status' : 'error'} -class API: -    def __init__(self, mod_rc, dpd): +class API(plugins.SimplePlugin): +    def __init__(self, mod_rc, bus): +        plugins.SimplePlugin.__init__(self, bus)          self.mod_rc = mod_rc -        self.dpd = dpd +        self.dpd_state = None + +    def start(self): +        self.bus.subscribe("dpd-state", self.dpd_state) + +    def stop(self): +        self.bus.unsubscribe("dpd-state", self.dpd_state) + +    def dpd_state(self, new_state): +        print("API got new dpd-state {}".format(new_state)) +        self.dpd_state = new_state      @cherrypy.expose      def index(self):          return """This is the api area."""      @cherrypy.expose +    @cherrypy.tools.json_out()      def rc_parameters(self): -        cherrypy.response.headers["Content-Type"] = "application/json"          return send_ok(self.mod_rc.get_modules())      @cherrypy.expose +    @cherrypy.tools.json_out()      def parameter(self, **kwargs):          if cherrypy.request.method == 'POST': -            cherrypy.response.headers["Content-Type"] = "application/json"              cl = cherrypy.request.headers['Content-Length']              rawbody = cherrypy.request.body.read(int(cl))              params = json.loads(rawbody) @@ -62,26 +79,26 @@ class API:              except ValueError as e:                  cherrypy.response.status = 400                  return send_error(str(e)) -            return send_ok(None) +            return send_ok()          else: -            cherrypy.response.headers["Content-Type"] = "application/json"              cherrypy.response.status = 400              return send_error("POST only")      @cherrypy.expose +    @cherrypy.tools.json_out()      def trigger_capture(self, **kwargs):          if cherrypy.request.method == 'POST': -            cherrypy.response.headers["Content-Type"] = "application/json" -            try: -                return send_ok(self.dpd.capture_samples()) -            except ValueError as e: -                return send_error(str(e)) +            cherrypy.engine.publish('dpd-capture', None) +            return send_ok()          else: -            cherrypy.response.headers["Content-Type"] = "application/json"              cherrypy.response.status = 400              return send_error("POST only")      @cherrypy.expose +    @cherrypy.tools.json_out()      def dpd_status(self, **kwargs): -        cherrypy.response.headers["Content-Type"] = "application/json" -        return send_ok(self.dpd.status()) +        if self.dpd_state is not None: +            return send_ok(self.dpd_state) +        else: +            return send_error("DPD state unknown") + | 
