AstroJS/botanjs/service/webapi.py

63 lines
1.7 KiB
Python
Raw Permalink Normal View History

2015-08-14 10:12:10 +00:00
#!/usr/bin/env python3
from flask import Flask
from flask import Response
from flask import render_template
from flask import request
2015-08-14 10:12:10 +00:00
from botanjs.service.jclassresv import BotanClassResolver as JCResv
from botanjs.service.jwork import app as CeleryApp, JWork
2016-05-30 04:29:30 +00:00
from botanjs.config import Config, DEBUG
2016-05-27 16:20:58 +00:00
2015-08-14 10:12:10 +00:00
import os
class WebAPI:
app = None
BRoot = None
BMap = None
BCache = None
def __init__( self, jsRoot = "../src", jsCache = "/tmp", brokerURL = None ):
self.BRoot = os.path.abspath( jsRoot )
self.BCache = os.path.join( jsCache, "botanjs" )
self.BMap = os.path.join( self.BCache, "bmap.xml" )
if brokerURL != None:
CeleryApp.conf.update( BROKER_URL = brokerURL )
2016-05-27 16:20:58 +00:00
self.app = Flask( __name__, static_url_path = self.BCache, static_folder = self.BCache )
2015-08-14 10:12:10 +00:00
self.app.jinja_env.add_extension( "compressinja.html.HtmlCompressor" )
2016-05-27 16:20:58 +00:00
self.app.add_url_rule( "/" , view_func = self.index )
self.app.add_url_rule( "/<mode>/" , view_func = lambda mode: self.api_request( mode, "zpayload" ) )
self.app.add_url_rule( "/<mode>/<path:code>" , view_func = self.api_request )
2015-08-14 10:12:10 +00:00
2016-05-30 04:29:30 +00:00
self.app.run(
host = Config[ "Service" ][ "BindAddress" ]
, port = int( Config[ "Service" ][ "Port" ] )
, debug = DEBUG )
2015-08-14 10:12:10 +00:00
2016-05-27 16:20:58 +00:00
def index( self ):
return "Hello, this is the BotanJS Service API.", 200
2015-08-14 10:12:10 +00:00
def api_request( self, mode, code ):
if code == "zpayload":
code = request.args.get( "p" )
2015-08-14 10:12:10 +00:00
try:
t = mode[1:]
if t == "js":
t = "application/javascript"
elif t == "css":
t = "text/css"
srvHandler = JCResv( JWork, self.BRoot, self.BMap, self.BCache )
return Response( srvHandler.getAPI( code, mode = mode ), mimetype = t )
2016-05-27 16:20:58 +00:00
except Exception as e:
2015-08-14 10:12:10 +00:00
return str(e), 404
2016-05-27 16:20:58 +00:00
2015-08-14 10:12:10 +00:00
return "Invalid request", 404